Changeset 1326 in webkit for trunk/JavaScriptCore/kjs


Ignore:
Timestamp:
Jun 10, 2002, 1:08:04 PM (23 years ago)
Author:
darin
Message:

JavaScriptCore:

Merged in changes from KDE 3.0.1.

  • kjs/collector.cpp:
  • kjs/date_object.cpp:
  • kjs/function.cpp:
  • kjs/internal.cpp:
  • kjs/lookup.h:
  • kjs/object.cpp:
  • kjs/operations.cpp:
  • kjs/regexp.cpp:
  • kjs/regexp_object.cpp:
  • kjs/regexp_object.h:
  • kjs/string_object.cpp:
  • kjs/testkjs.cpp:
  • kjs/ustring.cpp:
  • kjs/value.cpp:
  • kjs/value.h: Do the merge, and add APPLE_CHANGES as needed to make things compile.
  • kjs/date_object.lut.h: Re-generated.

WebCore:

Merged in changes from KDE 3.0.1.

  • kwq/kdecore/kurl.h:
  • kwq/KWQKURL.mm: (operator==): New, needed by some 3.0.1 code.
  • kwq/qt/qpalette.h: Add QPalette::NColorGroups and QColorGroup::NColorRoles.
  • kwq/KWQPalette.mm: Simplify by getting rid of "private" indirection. (QPalette::color): New, needed by some 3.0.1 code.
  • kwq/KWQColorGroup.mm: Simplify by getting rid of "private" indirection.
  • kwq/qt/qstring.h:
  • kwq/KWQString.mm: (QConstString::QConstString): Change parameter to const QChar * to match Qt so we compile.
  • kwq/qt/qtextedit.h:
  • kwq/KWQTextEdit.mm: (QTextEdit::setTabStopWidth): Add unimplemented placeholder, needed by some 3.0.1 code.
  • kwq/qt/qvaluelist.h:
  • kwq/KWQValueListImpl.h:
  • kwq/KWQValueListImpl.mm: Simplify implementation.
  • WebCore-tests.exp: Update for changes in QValueList implementation.
  • kwq/kdecore/klibloader.h: Add include of <kio/global.h> to make something compile.
  • kwq/khtml/java/kjavaappletcontext.h: Add JType and constructor that takes DCOPObject*.
  • kwq/kio/global.h: Add KIO::CacheControl.
  • khtml/css/css_ruleimpl.cpp:
  • khtml/css/css_ruleimpl.h:
  • khtml/css/css_stylesheetimpl.cpp:
  • khtml/css/css_stylesheetimpl.h:
  • khtml/css/css_valueimpl.cpp:
  • khtml/css/css_valueimpl.h:
  • khtml/css/cssparser.cpp:
  • khtml/css/cssparser.h:
  • khtml/css/cssstyleselector.cpp:
  • khtml/css/cssstyleselector.h:
  • khtml/css/html4.css:
  • khtml/dom/css_rule.cpp:
  • khtml/dom/css_rule.h:
  • khtml/dom/css_stylesheet.cpp:
  • khtml/dom/css_stylesheet.h:
  • khtml/dom/css_value.cpp:
  • khtml/dom/dom2_events.cpp:
  • khtml/dom/dom2_range.cpp:
  • khtml/dom/dom2_range.h:
  • khtml/dom/dom2_views.cpp:
  • khtml/dom/dom_doc.cpp:
  • khtml/dom/dom_element.cpp:
  • khtml/dom/dom_exception.h:
  • khtml/dom/dom_node.cpp:
  • khtml/dom/dom_string.cpp:
  • khtml/dom/dom_text.cpp:
  • khtml/dom/dom_xml.cpp:
  • khtml/dom/html_base.cpp:
  • khtml/dom/html_block.cpp:
  • khtml/dom/html_document.cpp:
  • khtml/dom/html_element.cpp:
  • khtml/dom/html_element.h:
  • khtml/dom/html_form.cpp:
  • khtml/dom/html_head.cpp:
  • khtml/dom/html_image.cpp:
  • khtml/dom/html_inline.cpp:
  • khtml/dom/html_list.cpp:
  • khtml/dom/html_misc.cpp:
  • khtml/dom/html_object.cpp:
  • khtml/dom/html_table.cpp:
  • khtml/ecma/kjs_html.cpp:
  • khtml/ecma/kjs_proxy.cpp:
  • khtml/ecma/kjs_traversal.cpp:
  • khtml/ecma/kjs_window.cpp:
  • khtml/html/html_baseimpl.cpp:
  • khtml/html/html_formimpl.cpp:
  • khtml/html/html_miscimpl.h:
  • khtml/html/html_objectimpl.cpp:
  • khtml/html/html_objectimpl.h:
  • khtml/html/htmlparser.cpp:
  • khtml/html/htmlparser.h:
  • khtml/html/htmltokenizer.cpp:
  • khtml/html/htmltokenizer.h:
  • khtml/khtml_part.cpp:
  • khtml/khtmlpart_p.h:
  • khtml/khtmlview.cpp:
  • khtml/misc/helper.cpp:
  • khtml/misc/khtmllayout.h:
  • khtml/misc/loader.cpp:
  • khtml/misc/loader.h:
  • khtml/misc/loader_client.h:
  • khtml/misc/shared.h: Added.
  • khtml/rendering/bidi.cpp:
  • khtml/rendering/break_lines.cpp:
  • khtml/rendering/font.cpp:
  • khtml/rendering/render_applet.cpp:
  • khtml/rendering/render_applet.h:
  • khtml/rendering/render_container.cpp:
  • khtml/rendering/render_form.cpp:
  • khtml/rendering/render_form.h:
  • khtml/rendering/render_frames.cpp:
  • khtml/rendering/render_image.cpp:
  • khtml/rendering/render_object.cpp:
  • khtml/rendering/render_object.h:
  • khtml/rendering/render_replaced.cpp:
  • khtml/rendering/render_replaced.h:
  • khtml/rendering/render_root.cpp:
  • khtml/rendering/render_style.cpp:
  • khtml/rendering/render_style.h:
  • khtml/rendering/render_table.cpp:
  • khtml/rendering/render_table.h:
  • khtml/rendering/render_text.cpp:
  • khtml/rendering/render_text.h:
  • khtml/xml/dom2_eventsimpl.h:
  • khtml/xml/dom2_rangeimpl.h:
  • khtml/xml/dom2_traversalimpl.cpp:
  • khtml/xml/dom2_traversalimpl.h:
  • khtml/xml/dom2_viewsimpl.h:
  • khtml/xml/dom_docimpl.cpp:
  • khtml/xml/dom_docimpl.h:
  • khtml/xml/dom_elementimpl.h:
  • khtml/xml/dom_nodeimpl.cpp:
  • khtml/xml/dom_nodeimpl.h:
  • khtml/xml/dom_stringimpl.cpp:
  • khtml/xml/dom_stringimpl.h:
  • khtml/xml/xml_tokenizer.h: Merge in 3.0.1 changes and add APPLE_CHANGES as necessary to get it to compile.
Location:
trunk/JavaScriptCore/kjs
Files:
16 edited

Legend:

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

    r1126 r1326  
    226226
    227227  // SWEEP: delete everything with a zero refcount (garbage)
     228  // 1st step: destruct all objects
    228229  block = root;
    229230  while (block) {
    230231    ValueImp **r = (ValueImp**)block->mem;
    231     int del = 0;
    232232    for (int i = 0; i < block->size; i++, r++) {
    233233      ValueImp *imp = (*r);
     
    239239        //fprintf( stderr, "Collector::deleting ValueImp %p (%s)\n", (void*)imp, typeid(*imp).name());
    240240        imp->~ValueImp();
    241         free(imp);
     241      }
     242    }
     243    block = block->next;
     244  }
     245
     246  // 2nd step: free memory
     247  block = root;
     248  while (block) {
     249    ValueImp **r = (ValueImp**)block->mem;
     250    int del = 0;
     251    for (int i = 0; i < block->size; i++, r++) {
     252      ValueImp *imp = (*r);
     253      if (imp && (imp->_flags & ValueImp::VI_DESTRUCTED) != 0) {
     254        free(imp);
    242255        *r = 0L;
    243256        del++;
  • trunk/JavaScriptCore/kjs/date_object.cpp

    r1024 r1326  
    7777@begin dateTable 61
    7878  toString              DateProtoFuncImp::ToString              DontEnum|Function       0
    79   toUTCString           -DateProtoFuncImp::ToString             DontEnum|Function       0
     79  toUTCString           DateProtoFuncImp::ToUTCString           DontEnum|Function       0
    8080  toDateString          DateProtoFuncImp::ToDateString          DontEnum|Function       0
    8181  toTimeString          DateProtoFuncImp::ToTimeString          DontEnum|Function       0
     
    196196  case ToTimeString:
    197197  case ToGMTString:
     198  case ToUTCString:
    198199    setlocale(LC_TIME,"C");
    199200    if (id == DateProtoFuncImp::ToDateString) {
     
    201202    } else if (id == DateProtoFuncImp::ToTimeString) {
    202203      strftime(timebuffer, bufsize, "%X",t);
    203     } else {
     204    } else { // toGMTString & toUTCString
    204205      t = gmtime(&tv);
    205       strftime(timebuffer, bufsize, "%a, %d-%b-%y %H:%M:%S %Z", t);
     206      strftime(timebuffer, bufsize, "%a, %d %b %Y %H:%M:%S %Z", t);
    206207    }
    207208    setlocale(LC_TIME,oldlocale.c_str());
  • trunk/JavaScriptCore/kjs/date_object.lut.h

    r901 r1326  
    6363   { "getUTCSeconds", -DateProtoFuncImp::GetSeconds, DontEnum|Function, 0, 0 },
    6464   { "getHours", DateProtoFuncImp::GetHours, DontEnum|Function, 0, 0 },
    65    { "toUTCString", -DateProtoFuncImp::ToString, DontEnum|Function, 0, &dateTableEntries[62] },
     65   { "toUTCString", DateProtoFuncImp::ToUTCString, DontEnum|Function, 0, &dateTableEntries[62] },
    6666   { 0, 0, 0, 0, 0 },
    6767   { 0, 0, 0, 0, 0 },
  • trunk/JavaScriptCore/kjs/function.cpp

    r1024 r1326  
    370370                                   "0123456789@*_+-./";
    371371
    372   if (id == Eval) { // eval()
     372  switch (id) {
     373  case Eval: { // eval()
    373374    Value x = args[0];
    374375    if (x.type() != StringType)
     
    423424          else
    424425              return Undefined();
    425       } else
     426      } else {
    426427          return c;
    427     }
    428   } else if (id == ParseInt) {
     428      }
     429    }
     430    break;
     431  }
     432  case ParseInt: {
    429433    String str = args[0].toString(exec);
    430434    int radix = args[1].toInt32(exec);
     
    442446    else
    443447        res = Number(static_cast<long>(value)); // remove floating-point part
    444   } else if (id == ParseFloat) {
     448    break;
     449  }
     450  case ParseFloat: {
    445451    String str = args[0].toString(exec);
    446452    res = Number(str.value().toDouble( true /*tolerant*/ ));
    447   } else if (id == IsNaN) {
     453    break;
     454  }
     455  case IsNaN:
    448456    res = Boolean(isNaN(args[0].toNumber(exec)));
    449   } else if (id == IsFinite) {
     457    break;
     458  case IsFinite: {
    450459    Number n = args[0].toNumber(exec);
    451460    res = Boolean(!n.isNaN() && !n.isInf());
    452   } else if (id == Escape) {
     461    break;
     462  }
     463  case Escape: {
    453464    UString r = "", s, str = args[0].toString(exec);
    454465    const UChar *c = str.data();
     
    469480    }
    470481    res = String(r);
    471   } else if (id == UnEscape) {
     482    break;
     483  }
     484  case UnEscape: {
    472485    UString s, str = args[0].toString(exec);
    473486    int k = 0, len = str.size();
     
    489502    }
    490503    res = String(s);
     504    break;
     505  }
    491506  }
    492507
  • trunk/JavaScriptCore/kjs/internal.cpp

    r1192 r1326  
    918918
    919919  // built-in values
    920   global.put(globExec,"NaN",        Number(NaN), DontEnum);
    921   global.put(globExec,"Infinity",   Number(Inf), DontEnum);
    922   global.put(globExec,"undefined",  Undefined(), DontEnum);
     920  global.put(globExec, "NaN",        Number(NaN), DontEnum|DontDelete);
     921  global.put(globExec, "Infinity",   Number(Inf), DontEnum|DontDelete);
     922  global.put(globExec, "undefined",  Undefined(), DontEnum|DontDelete);
    923923
    924924  // built-in functions
  • trunk/JavaScriptCore/kjs/lookup.h

    r1024 r1326  
    195195    fprintf(stderr, "Function bit not set! Shouldn't happen in lookupGetFunction!\n" );
    196196    return Undefined();
    197   };
     197  }
    198198
    199199  /**
  • trunk/JavaScriptCore/kjs/object.cpp

    r1024 r1326  
    201201{
    202202  //fprintf(stderr,"ObjectImp::~ObjectImp %p\n",(void*)this);
    203 #if 0 // Those could be already deleted. The collector ensures no order
    204       // ### Check if this leads to memory leaks....
    205203  if (_proto)
    206204    _proto->setGcAllowed();
     
    209207  if (_scope)
    210208    _scope->setGcAllowed();
    211 #endif
    212209  delete _prop;
    213210}
  • trunk/JavaScriptCore/kjs/operations.cpp

    r798 r1326  
    221221Value KJS::add(ExecState *exec, const Value &v1, const Value &v2, char oper)
    222222{
    223   Value p1 = v1.toPrimitive(exec);
    224   Value p2 = v2.toPrimitive(exec);
     223  // exception for the Date exception in defaultValue()
     224  Type preferred = oper == '+' ? UnspecifiedType : NumberType;
     225  Value p1 = v1.toPrimitive(exec, preferred);
     226  Value p2 = v2.toPrimitive(exec, preferred);
    225227
    226228  if ((p1.type() == StringType || p2.type() == StringType) && oper == '+') {
  • trunk/JavaScriptCore/kjs/regexp.cpp

    r1024 r1326  
    2020 */
    2121
     22#include "regexp.h"
     23
    2224#include <stdio.h>
    2325#include <stdlib.h>
    2426#include <string.h>
    25 
    26 #include "regexp.h"
    2727
    2828using namespace KJS;
     
    3131  : pattern(p), flags(f)
    3232{
    33 
    3433#ifdef HAVE_PCREPOSIX
    3534  int pcreflags = 0;
     
    4544  pcregex = pcre_compile(p.ascii(), pcreflags,
    4645                         &perrormsg, &errorOffset, NULL);
     46#ifndef NDEBUG
     47  if (!pcregex)
     48    fprintf(stderr, "KJS: pcre_compile() failed with '%s'\n", perrormsg);
     49#endif
    4750
    4851#ifdef PCRE_INFO_CAPTURECOUNT
     
    5558#else /* HAVE_PCREPOSIX */
    5659
    57   nrSubPatterns = 0; // not implemented with POSIX regex.
     60  nrSubPatterns = 0; // determined in match() with POSIX regex.
    5861  int regflags = 0;
    5962#ifdef REG_EXTENDED
     
    7982{
    8083#ifdef HAVE_PCREPOSIX
    81   pcre_free(pcregex);
    82 
     84  if (pcregex)
     85    pcre_free(pcregex);
    8386#else
    8487  /* TODO: is this really okay after an error ? */
     
    8992UString RegExp::match(const UString &s, int i, int *pos, int **ovector)
    9093{
     94  if (i < 0)
     95    i = 0;
     96  if (ovector)
     97    *ovector = 0L;
     98  int dummyPos;
     99  if (!pos)
     100    pos = &dummyPos;
     101  *pos = -1;
     102  if (i > s.size() || s.isNull())
     103    return UString::null;
    91104
    92105#ifdef HAVE_PCREPOSIX
     
    95108  if (ovector) *ovector = new int[ovecsize];
    96109
    97   if (i < 0)
    98     i = 0;
    99 
    100   if (i > s.size() || s.isNull() ||
    101       pcre_exec(pcregex, NULL, buffer.c_str(), buffer.size(), i,
    102                 0, ovector ? *ovector : 0L, ovecsize) == PCRE_ERROR_NOMATCH) {
    103 
    104     if (pos)
    105        *pos = -1;
     110  if (!pcregex || pcre_exec(pcregex, NULL, buffer.c_str(), buffer.size(), i,
     111                  0, ovector ? *ovector : 0L, ovecsize) == PCRE_ERROR_NOMATCH)
    106112    return UString::null;
    107   }
    108113
    109114  if (!ovector)
    110115    return UString::null; // don't rely on the return value if you pass ovector==0
    111   if (pos)
    112      *pos = (*ovector)[0];
    113   return s.substr((*ovector)[0], (*ovector)[1] - (*ovector)[0]);
     116#else
     117#ifdef APPLE_CHANGES
     118  const uint maxMatch = 10;
     119#else
     120  const int maxMatch = 10;
     121#endif
     122  regmatch_t rmatch[maxMatch];
    114123
    115 #else
    116   regmatch_t rmatch[10];
    117 
    118   if (i < 0)
    119     i = 0;
    120 
    121   char *str = strdup(s.ascii());
    122   if (i > s.size() || s.isNull() ||
    123       regexec(&preg, str + i, 10, rmatch, 0)) {
    124     if (pos)
    125        *pos = -1;
     124  char *str = strdup(s.ascii()); // TODO: why ???
     125  if (regexec(&preg, str + i, maxMatch, rmatch, 0)) {
     126    free(str);
    126127    return UString::null;
    127128  }
    128129  free(str);
    129130
    130   if (pos)
    131      *pos = rmatch[0].rm_so + i;
    132   // TODO copy from rmatch to ovector
    133   return s.substr(rmatch[0].rm_so + i, rmatch[0].rm_eo - rmatch[0].rm_so);
     131  if (!ovector) {
     132    *pos = rmatch[0].rm_so + i;
     133    return s.substr(rmatch[0].rm_so + i, rmatch[0].rm_eo - rmatch[0].rm_so);
     134  }
     135
     136  // map rmatch array to ovector used in PCRE case
     137  nrSubPatterns = 0;
     138#ifdef APPLE_CHANGES
     139  for(uint j = 1; j < maxMatch && rmatch[j].rm_so >= 0 ; j++)
     140#else
     141  for(int j = 1; j < maxMatch && rmatch[j].rm_so >= 0 ; j++)
    134142#endif
     143      nrSubPatterns++;
     144  int ovecsize = (nrSubPatterns+1)*3; // see above
     145  *ovector = new int[ovecsize];
     146#ifdef APPLE_CHANGES
     147  for (uint j = 0; j < nrSubPatterns + 1; j++) {
     148#else
     149  for (int j = 0; j < nrSubPatterns + 1; j++) {
     150#endif
     151    if (j>maxMatch)
     152      break;
     153    (*ovector)[2*j] = rmatch[j].rm_so + i;
     154    (*ovector)[2*j+1] = rmatch[j].rm_eo + i;
     155#ifdef APPLE_CHANGES
     156  } // balance extra { so we don't confuse prepare-ChangeLog
     157#else
     158  }
     159#endif
     160#endif
     161
     162  *pos = (*ovector)[0];
     163  return s.substr((*ovector)[0], (*ovector)[1] - (*ovector)[0]);
    135164}
    136165
  • trunk/JavaScriptCore/kjs/regexp_object.cpp

    r1024 r1326  
    9393    if (i < 0 || i > length) {
    9494      thisObj.put(exec,"lastIndex", Number(0), DontDelete | DontEnum);
    95       return Null();
     95      if (id == Test)
     96        return Boolean(false);
     97      else
     98        Null();
    9699    }
    97100    RegExpObjectImp* regExpObj = static_cast<RegExpObjectImp*>(exec->interpreter()->builtinRegExp().imp());
     
    99102
    100103    str = re->match(s.value(), i, 0L, ovector);
     104    regExpObj->setSubPatterns(re->subPatterns());
    101105
    102106    if (id == Test)
     
    160164RegExpObjectImp::~RegExpObjectImp()
    161165{
    162   if (lastOvector)
    163     delete [] lastOvector;
     166  delete [] lastOvector;
    164167}
    165168
     
    167170{
    168171  lastString = s;
    169   if (lastOvector)
    170     delete [] lastOvector;
     172  delete [] lastOvector;
    171173  lastOvector = 0;
    172174  lastNrSubPatterns = re->subPatterns();
  • trunk/JavaScriptCore/kjs/regexp_object.h

    r1024 r1326  
    7575    Value get(ExecState *exec, const UString &p) const;
    7676    int ** registerRegexp( const RegExp* re, const UString& s );
     77    void setSubPatterns(int num) { lastNrSubPatterns = num; }
    7778    Value arrayOfMatches(ExecState *exec, const UString &result) const;
    7879  private:
  • trunk/JavaScriptCore/kjs/string_object.cpp

    r1024 r1326  
    214214    int **ovector = regExpObj->registerRegexp( reg, u );
    215215    UString mstr = reg->match(u, -1, &pos, ovector);
     216    regExpObj->setSubPatterns(reg->subPatterns());
    216217    if (a0.isA(StringType))
    217218      delete reg;
     
    243244        int **ovector = regExpObj->registerRegexp( reg, u );
    244245        UString mstr = reg->match(u, lastIndex, &pos, ovector);
     246        regExpObj->setSubPatterns(reg->subPatterns());
     247        if (pos == -1)
     248          break;
    245249        len = mstr.size();
     250        // special case of empty match
     251        if (len == 0 && lastIndex > 0) {
     252          pos = lastIndex + 1;
     253          if (pos > u.size())
     254            break;
     255        }
    246256        UString rstr(u3);
    247257        bool ok;
     
    263273        }
    264274        lastIndex = pos + rstr.size();
    265         if ( pos != -1 )
    266           u = u.substr(0, pos) + rstr + u.substr(pos + len);
     275        u = u.substr(0, pos) + rstr + u.substr(pos + len);
    267276        //fprintf(stderr,"pos=%d,len=%d,lastIndex=%d,u=%s\n",pos,len,lastIndex,u.ascii());
    268       } while ( global && pos != -1 );
     277      } while (global);
    269278
    270279      result = String(u);
  • trunk/JavaScriptCore/kjs/testkjs.cpp

    r1041 r1326  
    2222
    2323#include <stdio.h>
    24 #if !APPLE_CHANGES
    25 #include <iostream.h>
    26 #endif
    2724
    2825#include "value.h"
  • trunk/JavaScriptCore/kjs/ustring.cpp

    r1272 r1326  
    424424  // empty string ?
    425425  if (*c == '\0')
    426     return 0.0;
     426    return tolerant ? NaN : 0.0;
    427427
    428428  // hex number ?
  • trunk/JavaScriptCore/kjs/value.cpp

    r1126 r1326  
    6565{
    6666  //fprintf(stderr,"ValueImp::~ValueImp %p\n",(void*)this);
     67  _flags |= VI_DESTRUCTED;
    6768}
    6869
  • trunk/JavaScriptCore/kjs/value.h

    r1140 r1326  
    161161      VI_MARKED = 1,
    162162      VI_GCALLOWED = 2,
    163       VI_CREATED = 4
     163      VI_CREATED = 4,
     164      VI_DESTRUCTED = 8
    164165    }; // VI means VALUEIMPL
    165166
Note: See TracChangeset for help on using the changeset viewer.