Merged KDE 3.0 final code in and:
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 15 Apr 2002 23:43:21 +0000 (23:43 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 15 Apr 2002 23:43:21 +0000 (23:43 +0000)
JavaScriptCore:

* kjs/internal.cpp:
* kjs/property_map.cpp:
* kjs/ustring.h:
Removed some unneeded <config.h> includes so we are more similar
to the real KDE sources.

Merged changes from KDE 3.0 final and did some build fixes.

* JavaScriptCore.pbproj/project.pbxproj: Added nodes2string.cpp.

* kjs/grammar.*: Regenerated.
* kjs/*.lut.h: Regenerated.

WebCore:

* src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration):
Remove some minor gratuitous diffs vs. KDE.

* src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration):
        Richard updated to reflect changes in KDE.

* src/kdelibs/khtml/css/css_valueimpl.cpp:
(FontFamilyValueImpl::FontFamilyValueImpl): Fix comment.
* src/kdelibs/khtml/css/cssstyleselector.cpp: Remove some gratuitous diffs vs. KDE.
* src/kdelibs/khtml/html/html_objectimpl.cpp:
(HTMLEmbedElementImpl::parseAttribute): Remove unneeded copy from KWQ's early days.
* src/kdelibs/khtml/html/html_tableimpl.cpp:
(HTMLTableElementImpl::parseAttribute),
(HTMLTablePartElementImpl::parseAttribute): Remove unneeded copy from KWQ's early days.
* src/kdelibs/khtml/html/htmltokenizer.cpp: (HTMLTokenizer::processToken): Redo the
APPLE_CHANGES ifdef here.
* src/kdelibs/khtml/khtmlpart_p.h: Update to latest kde.
* src/kdelibs/khtml/khtmlview.cpp: (KHTMLView::KHTMLView): Add ifdef APPLE_CHANGES.
(KHTMLView::~KHTMLView): Add ifdef APPLE_CHANGES.
(KHTMLView::print): Remove code left in here during merge process.
* src/kwq/KWQKHTMLPart.mm: Remove unused setFontSizes(), fontSizes(), and
resetFontSizes(). After the merge is landed, remove more.
* src/libwebcore.exp: Export updateStyleSelector() for WebKit.

Fix text to it displays at the right font size.

* src/kdelibs/khtml/css/cssstyleselector.cpp:
(CSSStyleSelector::computeFontSizes): Apply the same SCREEN_RESOLUTION hack here
that we do elsewhere.
* src/kdelibs/khtml/rendering/font.cpp: (Font::width): Use kMin instead of max (oops).
(Font::update): Turn off font database chicanery.
* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::zoomFactor): Use zoom factor 100, not 1.

More fixes so text displays (still at wrong font size).

* src/kdelibs/khtml/rendering/font.cpp: (max): New helper.
(Font::drawText): Simplified implementation for now.
(Font::width): Simplified implementation for now.
* src/kwq/KWQColorGroup.mm: Reinstated QCOLOR_GROUP_SIZE.

* src/kwq/qt/qfontmetrics.h: Removed charWidth and changed _width to take QChar *.
* src/kwq/KWQFontMetrics.mm: Removed charWidth and changed _width to take QChar *.

Merged changes from KDE 3.0 final. Other fixes to get things compiling.

* src/kdelibs/khtml/css/css_valueimpl.cpp:
(CSSStyleDeclarationImpl::setProperty): Fix unused variable.
* src/kdelibs/khtml/khtmlview.cpp: (KHTMLView::contentsContextMenuEvent):
Fix unused variable.
* src/kdelibs/khtml/rendering/font.cpp: (Font::drawText), (Font::width),
(Font::update): Disable special "nsbp" logic for now. We can reenable it
if necessary.
* src/kdelibs/khtml/rendering/render_replaced.cpp: Fix mismerge.
* src/kdelibs/khtml/rendering/render_text.cpp: (RenderText::nodeAtPoint):
Fix unused variable.
* src/kwq/KWQApplication.mm: (QDesktopWidget::width), (QApplication::desktop):
Fix mismerge.
* src/kwq/KWQColorGroup.mm: Fix QCOLOR_GROUP_SIZE.
* src/kwq/KWQFontMetrics.mm: (QFontMetrics::lineSpacing): New.
(QFontMetrics::width): Remove unused optimization.
* src/kwq/qt/qfontmetrics.h: Add lineSpacing().

        Merged changes from previous merge pass.

        2002-03-25  Darin Adler  <darin@apple.com>

        Last bit of making stuff compile and link. Probably will drop the merge now
        and take it up again when it's time to merge in KDE 3.0 final.

* src/kwq/KWQEvent.mm: (QFocusEvent::reason): New.
* src/kwq/KWQPainter.mm: (QPainter::drawText): New overload.

        2002-03-25  Darin Adler  <darin@apple.com>

* src/kdelibs/khtml/rendering/font.cpp: (Font::width): Make it call _width so we
        don't lose the optimization.

* src/kwq/KWQApplication.mm: (QDesktopWidget::screenNumber): New.
(QDesktopWidget::screenGeometry): New.
        (QApplication::style): New.
* src/kwq/KWQColorGroup.mm: (QColorGroup::highlight): New.
(QColorGroup::highlightedText): New.
* src/kwq/KWQFont.mm: (QFont::setPixelSize): New.
* src/kwq/KWQFontMetrics.mm: (QFontMetrics::charWidth): New.
* src/kwq/KWQKGlobal.mm: (KGlobal::locale): Implement.
        (KLocale::KLocale): New.
(KLocale::languageList): New.
* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::sheetUsed): New.
(KHTMLPart::setSheetUsed): New.
        (KHTMLPart::zoomFactor): New.
* src/kwq/KWQKHTMLSettings.mm: (KHTMLSettings::mediumFontSize): New.
* src/kwq/KWQScrollView.mm: (QScrollView::childX): New.
        (QScrollView::childY): New.

* src/kwq/qt/qapplication.h: style() returns a QStyle &.
* src/kwq/qt/qpalette.h: Add Highlight and HighlightedText.

        2002-03-24  Darin Adler  <darin@apple.com>

        More compiling. Still won't link.

* src/kdelibs/khtml/khtmlview.cpp: Disable printing and drag and drop code.
* src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration):
        Temporarily turn off our smarter underlining since it relies on access to the
        string, and TextSlave doesn't have that any more.
(RenderText::nodeAtPoint): Get rid of a workaround we don't need any more for
        a bug that was fixed by KDE folks.
* src/kwq/KWQApplication.mm: (QApplication::desktop): Make the desktop be a
        QDesktopWidget.
* src/kwq/qt/qnamespace.h: Add MetaButton.
* src/kwq/qt/qtooltip.h: Add a maybeTip virtual function member and a virtual
        destructor.

        2002-03-24  Darin Adler  <darin@apple.com>

        Some fixes to get more stuff to compile.

* src/kdelibs/khtml/ecma/kjs_dom.cpp: (DOMDocument::getValueProperty):
        Don't try to look at the private m_bComplete to display "complete". Just do
        "loading" and "loaded".
        * src/kdelibs/khtml/khtmlpart_p.h: #ifdef this all out for APPLE_CHANGES.
* src/kdelibs/khtml/rendering/font.cpp: (Font::update): Add an explicit cast to
        int to avoid float -> int warning.
* src/kdelibs/khtml/rendering/render_table.cpp: (RenderTable::calcColMinMax):
        Add an explicit cast to int to avoid uint compared with int warning.
* src/kdelibs/khtml/xml/dom_docimpl.cpp: (DocumentImpl::recalcStyleSelector):
        Use sheetUsed() and setSheetUsed() functions on KHTMLPart intead of getting
        at private fields the way the real KDE code does.

        * src/kwq/KWQKHTMLPart.h: Declare zoomFactor(), sheetUsed(), and setSheetUsed().
* src/kwq/KWQStyle.h: Add PM_DefaultFramWidth as another metric.
* src/kwq/kdecore/klocale.h: Add languageList().
* src/kwq/khtml/khtml_settings.h: Add mediumFontSize().
* src/kwq/qt/qapplication.h: Add style() and QDesktopWidget.
* src/kwq/qt/qevent.h: Add reason().
* src/kwq/qt/qfont.h: Add setPixelSize(int).
* src/kwq/qt/qfontmetrics.h: Add charWidth() and _charWidth() functions.
* src/kwq/qt/qpainter.h: Add drawText() overload with position parameter.
* src/kwq/qt/qpalette.h: Add highlight() and highlightedText().
* src/kwq/qt/qscrollview.h: Add childX() and childY().

* src/kwq/KWQApplication.mm: Change KWQDesktopWidget to QDesktopWidget.

WebKit:

* WebView.subproj/IFPreferences.h:
* WebView.subproj/IFPreferences.mm: (+[IFPreferences load]): Remove the old
WebKitFontSizes preference.
(-[IFPreferences mediumFontSize]), (-[IFPreferences setMediumFontSize:]): New.

* WebView.subproj/IFWebView.mm: (-[IFWebView reapplyStyles]): Call
updateStyleSelector() instead of recalcStyle().

        Merged changes from previous merge branch.

        2002-03-25  Darin Adler  <darin@apple.com>

* WebView.subproj/IFPreferences.mm: (+[IFPreferences load]):
        Add WebKitMediumFontSizePreferenceKey.

WebBrowser:

* Preferences.subproj/TextPreferences.m: (-[TextPreferences defaultFontSize]),
(-[TextPreferences setDefaultFontSize:]): Just get and set the new mediumFontSize
preference rather than doing the whole fontSizes preference dance.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@1024 268f45cc-cd09-0410-ab3c-d52691b4dbfc

513 files changed:
JavaScriptCore/ChangeLog
JavaScriptCore/ChangeLog-2002-12-03
JavaScriptCore/ChangeLog-2003-10-25
JavaScriptCore/JavaScriptCore.pbproj/project.pbxproj
JavaScriptCore/kjs/array_object.cpp
JavaScriptCore/kjs/array_object.h
JavaScriptCore/kjs/bool_object.h
JavaScriptCore/kjs/collector.cpp
JavaScriptCore/kjs/collector.h
JavaScriptCore/kjs/date_object.cpp
JavaScriptCore/kjs/date_object.h
JavaScriptCore/kjs/debugger.cpp
JavaScriptCore/kjs/debugger.h
JavaScriptCore/kjs/error_object.h
JavaScriptCore/kjs/function.cpp
JavaScriptCore/kjs/function.h
JavaScriptCore/kjs/function_object.cpp
JavaScriptCore/kjs/function_object.h
JavaScriptCore/kjs/grammar.cpp
JavaScriptCore/kjs/grammar.y
JavaScriptCore/kjs/internal.cpp
JavaScriptCore/kjs/internal.h
JavaScriptCore/kjs/interpreter.cpp
JavaScriptCore/kjs/interpreter.h
JavaScriptCore/kjs/lexer.cpp
JavaScriptCore/kjs/lexer.h
JavaScriptCore/kjs/lookup.cpp
JavaScriptCore/kjs/lookup.h
JavaScriptCore/kjs/math_object.cpp
JavaScriptCore/kjs/math_object.h
JavaScriptCore/kjs/math_object.lut.h
JavaScriptCore/kjs/nodes.cpp
JavaScriptCore/kjs/nodes.h
JavaScriptCore/kjs/number_object.cpp
JavaScriptCore/kjs/number_object.h
JavaScriptCore/kjs/object.cpp
JavaScriptCore/kjs/object.h
JavaScriptCore/kjs/object_object.cpp
JavaScriptCore/kjs/object_object.h
JavaScriptCore/kjs/operations.h
JavaScriptCore/kjs/property_map.cpp
JavaScriptCore/kjs/property_map.h
JavaScriptCore/kjs/regexp.cpp
JavaScriptCore/kjs/regexp.h
JavaScriptCore/kjs/regexp_object.cpp
JavaScriptCore/kjs/regexp_object.h
JavaScriptCore/kjs/string_object.cpp
JavaScriptCore/kjs/string_object.h
JavaScriptCore/kjs/testkjs.cpp
JavaScriptCore/kjs/types.cpp
JavaScriptCore/kjs/types.h
JavaScriptCore/kjs/ustring.cpp
JavaScriptCore/kjs/ustring.h
JavaScriptCore/kjs/value.cpp
JavaScriptCore/kjs/value.h
WebCore/ChangeLog-2002-12-03
WebCore/ChangeLog-2003-10-25
WebCore/ChangeLog-2005-08-23
WebCore/khtml/css/css_ruleimpl.cpp
WebCore/khtml/css/css_ruleimpl.h
WebCore/khtml/css/css_stylesheetimpl.cpp
WebCore/khtml/css/css_stylesheetimpl.h
WebCore/khtml/css/css_valueimpl.cpp
WebCore/khtml/css/css_valueimpl.h
WebCore/khtml/css/csshelper.cpp
WebCore/khtml/css/csshelper.h
WebCore/khtml/css/cssparser.cpp
WebCore/khtml/css/cssparser.h
WebCore/khtml/css/cssstyleselector.cpp
WebCore/khtml/css/cssstyleselector.h
WebCore/khtml/css/cssvalues.in
WebCore/khtml/css/html4.css
WebCore/khtml/css/makeprop
WebCore/khtml/css/makevalues
WebCore/khtml/dom/css_rule.cpp
WebCore/khtml/dom/css_rule.h
WebCore/khtml/dom/css_stylesheet.cpp
WebCore/khtml/dom/css_stylesheet.h
WebCore/khtml/dom/css_value.cpp
WebCore/khtml/dom/css_value.h
WebCore/khtml/dom/dom2_events.cpp
WebCore/khtml/dom/dom2_events.h
WebCore/khtml/dom/dom2_range.cpp
WebCore/khtml/dom/dom2_range.h
WebCore/khtml/dom/dom2_traversal.cpp
WebCore/khtml/dom/dom2_traversal.h
WebCore/khtml/dom/dom2_views.cpp
WebCore/khtml/dom/dom2_views.h
WebCore/khtml/dom/dom_core.h
WebCore/khtml/dom/dom_doc.cpp
WebCore/khtml/dom/dom_doc.h
WebCore/khtml/dom/dom_element.cpp
WebCore/khtml/dom/dom_element.h
WebCore/khtml/dom/dom_exception.h
WebCore/khtml/dom/dom_html.h
WebCore/khtml/dom/dom_misc.cpp
WebCore/khtml/dom/dom_misc.h
WebCore/khtml/dom/dom_node.cpp
WebCore/khtml/dom/dom_node.h
WebCore/khtml/dom/dom_string.h
WebCore/khtml/dom/dom_text.cpp
WebCore/khtml/dom/dom_text.h
WebCore/khtml/dom/dom_xml.cpp
WebCore/khtml/dom/dom_xml.h
WebCore/khtml/dom/html_base.cpp
WebCore/khtml/dom/html_base.h
WebCore/khtml/dom/html_block.cpp
WebCore/khtml/dom/html_block.h
WebCore/khtml/dom/html_document.cpp
WebCore/khtml/dom/html_document.h
WebCore/khtml/dom/html_element.cpp
WebCore/khtml/dom/html_element.h
WebCore/khtml/dom/html_form.cpp
WebCore/khtml/dom/html_form.h
WebCore/khtml/dom/html_head.cpp
WebCore/khtml/dom/html_head.h
WebCore/khtml/dom/html_image.cpp
WebCore/khtml/dom/html_image.h
WebCore/khtml/dom/html_inline.cpp
WebCore/khtml/dom/html_inline.h
WebCore/khtml/dom/html_list.cpp
WebCore/khtml/dom/html_list.h
WebCore/khtml/dom/html_misc.cpp
WebCore/khtml/dom/html_misc.h
WebCore/khtml/dom/html_object.cpp
WebCore/khtml/dom/html_object.h
WebCore/khtml/dom/html_table.cpp
WebCore/khtml/dom/html_table.h
WebCore/khtml/ecma/kjs_binding.cpp
WebCore/khtml/ecma/kjs_binding.h
WebCore/khtml/ecma/kjs_css.cpp
WebCore/khtml/ecma/kjs_css.h
WebCore/khtml/ecma/kjs_dom.cpp
WebCore/khtml/ecma/kjs_dom.h
WebCore/khtml/ecma/kjs_events.cpp
WebCore/khtml/ecma/kjs_events.h
WebCore/khtml/ecma/kjs_html.cpp
WebCore/khtml/ecma/kjs_html.h
WebCore/khtml/ecma/kjs_navigator.cpp
WebCore/khtml/ecma/kjs_navigator.h
WebCore/khtml/ecma/kjs_proxy.cpp
WebCore/khtml/ecma/kjs_window.cpp
WebCore/khtml/ecma/kjs_window.h
WebCore/khtml/html/dtd.cpp
WebCore/khtml/html/dtd.h
WebCore/khtml/html/html_baseimpl.cpp
WebCore/khtml/html/html_baseimpl.h
WebCore/khtml/html/html_blockimpl.cpp
WebCore/khtml/html/html_blockimpl.h
WebCore/khtml/html/html_documentimpl.cpp
WebCore/khtml/html/html_documentimpl.h
WebCore/khtml/html/html_elementimpl.cpp
WebCore/khtml/html/html_elementimpl.h
WebCore/khtml/html/html_formimpl.cpp
WebCore/khtml/html/html_formimpl.h
WebCore/khtml/html/html_headimpl.cpp
WebCore/khtml/html/html_headimpl.h
WebCore/khtml/html/html_imageimpl.cpp
WebCore/khtml/html/html_imageimpl.h
WebCore/khtml/html/html_inlineimpl.cpp
WebCore/khtml/html/html_inlineimpl.h
WebCore/khtml/html/html_listimpl.cpp
WebCore/khtml/html/html_listimpl.h
WebCore/khtml/html/html_miscimpl.cpp
WebCore/khtml/html/html_miscimpl.h
WebCore/khtml/html/html_objectimpl.cpp
WebCore/khtml/html/html_objectimpl.h
WebCore/khtml/html/html_tableimpl.cpp
WebCore/khtml/html/html_tableimpl.h
WebCore/khtml/html/htmlparser.cpp
WebCore/khtml/html/htmlparser.h
WebCore/khtml/html/htmltokenizer.cpp
WebCore/khtml/html/htmltokenizer.h
WebCore/khtml/java/kjavaapplet.h
WebCore/khtml/java/kjavaappletcontext.cpp
WebCore/khtml/java/kjavaappletcontext.h
WebCore/khtml/java/kjavaappletserver.h
WebCore/khtml/java/kjavaprocess.cpp
WebCore/khtml/khtml_events.cpp
WebCore/khtml/khtml_events.h
WebCore/khtml/khtml_ext.h
WebCore/khtml/khtml_part.h
WebCore/khtml/khtmlpart_p.h [new file with mode: 0644]
WebCore/khtml/khtmlview.cpp
WebCore/khtml/khtmlview.h
WebCore/khtml/misc/decoder.cpp
WebCore/khtml/misc/decoder.h
WebCore/khtml/misc/helper.cpp
WebCore/khtml/misc/helper.h
WebCore/khtml/misc/khtmllayout.h
WebCore/khtml/misc/loader.h
WebCore/khtml/misc/loader_client.h
WebCore/khtml/misc/makeattrs
WebCore/khtml/misc/maketags
WebCore/khtml/misc/stringit.h
WebCore/khtml/rendering/Makefile.am
WebCore/khtml/rendering/bidi.cpp
WebCore/khtml/rendering/bidi.h
WebCore/khtml/rendering/font.cpp
WebCore/khtml/rendering/font.h
WebCore/khtml/rendering/render_applet.cpp
WebCore/khtml/rendering/render_applet.h
WebCore/khtml/rendering/render_body.cpp
WebCore/khtml/rendering/render_body.h
WebCore/khtml/rendering/render_box.cpp
WebCore/khtml/rendering/render_box.h
WebCore/khtml/rendering/render_br.cpp
WebCore/khtml/rendering/render_br.h
WebCore/khtml/rendering/render_container.cpp
WebCore/khtml/rendering/render_container.h
WebCore/khtml/rendering/render_flow.cpp
WebCore/khtml/rendering/render_flow.h
WebCore/khtml/rendering/render_form.cpp
WebCore/khtml/rendering/render_form.h
WebCore/khtml/rendering/render_frames.cpp
WebCore/khtml/rendering/render_frames.h
WebCore/khtml/rendering/render_html.cpp
WebCore/khtml/rendering/render_html.h
WebCore/khtml/rendering/render_image.cpp
WebCore/khtml/rendering/render_image.h
WebCore/khtml/rendering/render_list.cpp
WebCore/khtml/rendering/render_list.h
WebCore/khtml/rendering/render_object.cpp
WebCore/khtml/rendering/render_object.h
WebCore/khtml/rendering/render_replaced.cpp
WebCore/khtml/rendering/render_replaced.h
WebCore/khtml/rendering/render_root.cpp
WebCore/khtml/rendering/render_root.h
WebCore/khtml/rendering/render_style.cpp
WebCore/khtml/rendering/render_style.h
WebCore/khtml/rendering/render_table.cpp
WebCore/khtml/rendering/render_table.h
WebCore/khtml/rendering/render_text.cpp
WebCore/khtml/rendering/render_text.h
WebCore/khtml/xml/dom2_eventsimpl.cpp
WebCore/khtml/xml/dom2_eventsimpl.h
WebCore/khtml/xml/dom2_rangeimpl.h
WebCore/khtml/xml/dom2_traversalimpl.h
WebCore/khtml/xml/dom2_viewsimpl.cpp
WebCore/khtml/xml/dom2_viewsimpl.h
WebCore/khtml/xml/dom_docimpl.cpp
WebCore/khtml/xml/dom_docimpl.h
WebCore/khtml/xml/dom_elementimpl.cpp
WebCore/khtml/xml/dom_elementimpl.h
WebCore/khtml/xml/dom_nodeimpl.cpp
WebCore/khtml/xml/dom_nodeimpl.h
WebCore/khtml/xml/dom_stringimpl.cpp
WebCore/khtml/xml/dom_stringimpl.h
WebCore/khtml/xml/dom_textimpl.h
WebCore/khtml/xml/dom_xmlimpl.h
WebCore/khtml/xml/xml_tokenizer.h
WebCore/kwq/KWQApplication.h
WebCore/kwq/KWQApplication.mm
WebCore/kwq/KWQColorGroup.mm
WebCore/kwq/KWQEvent.h
WebCore/kwq/KWQEvent.mm
WebCore/kwq/KWQFont.h
WebCore/kwq/KWQFont.mm
WebCore/kwq/KWQFontMetrics.h
WebCore/kwq/KWQFontMetrics.mm
WebCore/kwq/KWQKGlobal.mm
WebCore/kwq/KWQKHTMLPart.mm
WebCore/kwq/KWQKHTMLPartImpl.mm
WebCore/kwq/KWQKHTMLSettings.h
WebCore/kwq/KWQKHTMLSettings.mm
WebCore/kwq/KWQKLocale.h
WebCore/kwq/KWQNamespace.h
WebCore/kwq/KWQPainter.h
WebCore/kwq/KWQPainter.mm
WebCore/kwq/KWQPalette.h
WebCore/kwq/KWQScrollView.h
WebCore/kwq/KWQScrollView.mm
WebCore/kwq/KWQToolTip.h
WebCore/kwq/kdecore/klocale.h
WebCore/kwq/khtml/khtml_settings.h
WebCore/kwq/qt/qapplication.h
WebCore/kwq/qt/qevent.h
WebCore/kwq/qt/qfont.h
WebCore/kwq/qt/qfontmetrics.h
WebCore/kwq/qt/qnamespace.h
WebCore/kwq/qt/qpainter.h
WebCore/kwq/qt/qpalette.h
WebCore/kwq/qt/qscrollview.h
WebCore/kwq/qt/qtooltip.h
WebCore/libwebcore.exp
WebCore/src/kdelibs/kdecore/Makefile.am
WebCore/src/kdelibs/kdecore/kentities.gperf
WebCore/src/kdelibs/khtml/css/css_ruleimpl.cpp
WebCore/src/kdelibs/khtml/css/css_ruleimpl.h
WebCore/src/kdelibs/khtml/css/css_stylesheetimpl.cpp
WebCore/src/kdelibs/khtml/css/css_stylesheetimpl.h
WebCore/src/kdelibs/khtml/css/css_valueimpl.cpp
WebCore/src/kdelibs/khtml/css/css_valueimpl.h
WebCore/src/kdelibs/khtml/css/csshelper.cpp
WebCore/src/kdelibs/khtml/css/csshelper.h
WebCore/src/kdelibs/khtml/css/cssparser.cpp
WebCore/src/kdelibs/khtml/css/cssparser.h
WebCore/src/kdelibs/khtml/css/cssstyleselector.cpp
WebCore/src/kdelibs/khtml/css/cssstyleselector.h
WebCore/src/kdelibs/khtml/css/cssvalues.in
WebCore/src/kdelibs/khtml/css/html4.css
WebCore/src/kdelibs/khtml/css/makeprop
WebCore/src/kdelibs/khtml/css/makevalues
WebCore/src/kdelibs/khtml/dom/css_rule.cpp
WebCore/src/kdelibs/khtml/dom/css_rule.h
WebCore/src/kdelibs/khtml/dom/css_stylesheet.cpp
WebCore/src/kdelibs/khtml/dom/css_stylesheet.h
WebCore/src/kdelibs/khtml/dom/css_value.cpp
WebCore/src/kdelibs/khtml/dom/css_value.h
WebCore/src/kdelibs/khtml/dom/dom2_events.cpp
WebCore/src/kdelibs/khtml/dom/dom2_events.h
WebCore/src/kdelibs/khtml/dom/dom2_range.cpp
WebCore/src/kdelibs/khtml/dom/dom2_range.h
WebCore/src/kdelibs/khtml/dom/dom2_traversal.cpp
WebCore/src/kdelibs/khtml/dom/dom2_traversal.h
WebCore/src/kdelibs/khtml/dom/dom2_views.cpp
WebCore/src/kdelibs/khtml/dom/dom2_views.h
WebCore/src/kdelibs/khtml/dom/dom_core.h
WebCore/src/kdelibs/khtml/dom/dom_doc.cpp
WebCore/src/kdelibs/khtml/dom/dom_doc.h
WebCore/src/kdelibs/khtml/dom/dom_element.cpp
WebCore/src/kdelibs/khtml/dom/dom_element.h
WebCore/src/kdelibs/khtml/dom/dom_exception.h
WebCore/src/kdelibs/khtml/dom/dom_html.h
WebCore/src/kdelibs/khtml/dom/dom_misc.cpp
WebCore/src/kdelibs/khtml/dom/dom_misc.h
WebCore/src/kdelibs/khtml/dom/dom_node.cpp
WebCore/src/kdelibs/khtml/dom/dom_node.h
WebCore/src/kdelibs/khtml/dom/dom_string.h
WebCore/src/kdelibs/khtml/dom/dom_text.cpp
WebCore/src/kdelibs/khtml/dom/dom_text.h
WebCore/src/kdelibs/khtml/dom/dom_xml.cpp
WebCore/src/kdelibs/khtml/dom/dom_xml.h
WebCore/src/kdelibs/khtml/dom/html_base.cpp
WebCore/src/kdelibs/khtml/dom/html_base.h
WebCore/src/kdelibs/khtml/dom/html_block.cpp
WebCore/src/kdelibs/khtml/dom/html_block.h
WebCore/src/kdelibs/khtml/dom/html_document.cpp
WebCore/src/kdelibs/khtml/dom/html_document.h
WebCore/src/kdelibs/khtml/dom/html_element.cpp
WebCore/src/kdelibs/khtml/dom/html_element.h
WebCore/src/kdelibs/khtml/dom/html_form.cpp
WebCore/src/kdelibs/khtml/dom/html_form.h
WebCore/src/kdelibs/khtml/dom/html_head.cpp
WebCore/src/kdelibs/khtml/dom/html_head.h
WebCore/src/kdelibs/khtml/dom/html_image.cpp
WebCore/src/kdelibs/khtml/dom/html_image.h
WebCore/src/kdelibs/khtml/dom/html_inline.cpp
WebCore/src/kdelibs/khtml/dom/html_inline.h
WebCore/src/kdelibs/khtml/dom/html_list.cpp
WebCore/src/kdelibs/khtml/dom/html_list.h
WebCore/src/kdelibs/khtml/dom/html_misc.cpp
WebCore/src/kdelibs/khtml/dom/html_misc.h
WebCore/src/kdelibs/khtml/dom/html_object.cpp
WebCore/src/kdelibs/khtml/dom/html_object.h
WebCore/src/kdelibs/khtml/dom/html_table.cpp
WebCore/src/kdelibs/khtml/dom/html_table.h
WebCore/src/kdelibs/khtml/ecma/kjs_binding.cpp
WebCore/src/kdelibs/khtml/ecma/kjs_binding.h
WebCore/src/kdelibs/khtml/ecma/kjs_css.cpp
WebCore/src/kdelibs/khtml/ecma/kjs_css.h
WebCore/src/kdelibs/khtml/ecma/kjs_dom.cpp
WebCore/src/kdelibs/khtml/ecma/kjs_dom.h
WebCore/src/kdelibs/khtml/ecma/kjs_events.cpp
WebCore/src/kdelibs/khtml/ecma/kjs_events.h
WebCore/src/kdelibs/khtml/ecma/kjs_html.cpp
WebCore/src/kdelibs/khtml/ecma/kjs_html.h
WebCore/src/kdelibs/khtml/ecma/kjs_navigator.cpp
WebCore/src/kdelibs/khtml/ecma/kjs_navigator.h
WebCore/src/kdelibs/khtml/ecma/kjs_proxy.cpp
WebCore/src/kdelibs/khtml/ecma/kjs_window.cpp
WebCore/src/kdelibs/khtml/ecma/kjs_window.h
WebCore/src/kdelibs/khtml/html/dtd.cpp
WebCore/src/kdelibs/khtml/html/dtd.h
WebCore/src/kdelibs/khtml/html/html_baseimpl.cpp
WebCore/src/kdelibs/khtml/html/html_baseimpl.h
WebCore/src/kdelibs/khtml/html/html_blockimpl.cpp
WebCore/src/kdelibs/khtml/html/html_blockimpl.h
WebCore/src/kdelibs/khtml/html/html_documentimpl.cpp
WebCore/src/kdelibs/khtml/html/html_documentimpl.h
WebCore/src/kdelibs/khtml/html/html_elementimpl.cpp
WebCore/src/kdelibs/khtml/html/html_elementimpl.h
WebCore/src/kdelibs/khtml/html/html_formimpl.cpp
WebCore/src/kdelibs/khtml/html/html_formimpl.h
WebCore/src/kdelibs/khtml/html/html_headimpl.cpp
WebCore/src/kdelibs/khtml/html/html_headimpl.h
WebCore/src/kdelibs/khtml/html/html_imageimpl.cpp
WebCore/src/kdelibs/khtml/html/html_imageimpl.h
WebCore/src/kdelibs/khtml/html/html_inlineimpl.cpp
WebCore/src/kdelibs/khtml/html/html_inlineimpl.h
WebCore/src/kdelibs/khtml/html/html_listimpl.cpp
WebCore/src/kdelibs/khtml/html/html_listimpl.h
WebCore/src/kdelibs/khtml/html/html_miscimpl.cpp
WebCore/src/kdelibs/khtml/html/html_miscimpl.h
WebCore/src/kdelibs/khtml/html/html_objectimpl.cpp
WebCore/src/kdelibs/khtml/html/html_objectimpl.h
WebCore/src/kdelibs/khtml/html/html_tableimpl.cpp
WebCore/src/kdelibs/khtml/html/html_tableimpl.h
WebCore/src/kdelibs/khtml/html/htmlparser.cpp
WebCore/src/kdelibs/khtml/html/htmlparser.h
WebCore/src/kdelibs/khtml/html/htmltokenizer.cpp
WebCore/src/kdelibs/khtml/html/htmltokenizer.h
WebCore/src/kdelibs/khtml/java/kjavaapplet.h
WebCore/src/kdelibs/khtml/java/kjavaappletcontext.cpp
WebCore/src/kdelibs/khtml/java/kjavaappletcontext.h
WebCore/src/kdelibs/khtml/java/kjavaappletserver.h
WebCore/src/kdelibs/khtml/java/kjavaprocess.cpp
WebCore/src/kdelibs/khtml/khtml_events.cpp
WebCore/src/kdelibs/khtml/khtml_events.h
WebCore/src/kdelibs/khtml/khtml_ext.h
WebCore/src/kdelibs/khtml/khtml_part.h
WebCore/src/kdelibs/khtml/khtmlpart_p.h [new file with mode: 0644]
WebCore/src/kdelibs/khtml/khtmlview.cpp
WebCore/src/kdelibs/khtml/khtmlview.h
WebCore/src/kdelibs/khtml/misc/decoder.cpp
WebCore/src/kdelibs/khtml/misc/decoder.h
WebCore/src/kdelibs/khtml/misc/helper.cpp
WebCore/src/kdelibs/khtml/misc/helper.h
WebCore/src/kdelibs/khtml/misc/khtmllayout.h
WebCore/src/kdelibs/khtml/misc/loader.h
WebCore/src/kdelibs/khtml/misc/loader_client.h
WebCore/src/kdelibs/khtml/misc/makeattrs
WebCore/src/kdelibs/khtml/misc/maketags
WebCore/src/kdelibs/khtml/misc/stringit.h
WebCore/src/kdelibs/khtml/rendering/Makefile.am
WebCore/src/kdelibs/khtml/rendering/bidi.cpp
WebCore/src/kdelibs/khtml/rendering/bidi.h
WebCore/src/kdelibs/khtml/rendering/font.cpp
WebCore/src/kdelibs/khtml/rendering/font.h
WebCore/src/kdelibs/khtml/rendering/render_applet.cpp
WebCore/src/kdelibs/khtml/rendering/render_applet.h
WebCore/src/kdelibs/khtml/rendering/render_body.cpp
WebCore/src/kdelibs/khtml/rendering/render_body.h
WebCore/src/kdelibs/khtml/rendering/render_box.cpp
WebCore/src/kdelibs/khtml/rendering/render_box.h
WebCore/src/kdelibs/khtml/rendering/render_br.cpp
WebCore/src/kdelibs/khtml/rendering/render_br.h
WebCore/src/kdelibs/khtml/rendering/render_container.cpp
WebCore/src/kdelibs/khtml/rendering/render_container.h
WebCore/src/kdelibs/khtml/rendering/render_flow.cpp
WebCore/src/kdelibs/khtml/rendering/render_flow.h
WebCore/src/kdelibs/khtml/rendering/render_form.cpp
WebCore/src/kdelibs/khtml/rendering/render_form.h
WebCore/src/kdelibs/khtml/rendering/render_frames.cpp
WebCore/src/kdelibs/khtml/rendering/render_frames.h
WebCore/src/kdelibs/khtml/rendering/render_html.cpp
WebCore/src/kdelibs/khtml/rendering/render_html.h
WebCore/src/kdelibs/khtml/rendering/render_image.cpp
WebCore/src/kdelibs/khtml/rendering/render_image.h
WebCore/src/kdelibs/khtml/rendering/render_list.cpp
WebCore/src/kdelibs/khtml/rendering/render_list.h
WebCore/src/kdelibs/khtml/rendering/render_object.cpp
WebCore/src/kdelibs/khtml/rendering/render_object.h
WebCore/src/kdelibs/khtml/rendering/render_replaced.cpp
WebCore/src/kdelibs/khtml/rendering/render_replaced.h
WebCore/src/kdelibs/khtml/rendering/render_root.cpp
WebCore/src/kdelibs/khtml/rendering/render_root.h
WebCore/src/kdelibs/khtml/rendering/render_style.cpp
WebCore/src/kdelibs/khtml/rendering/render_style.h
WebCore/src/kdelibs/khtml/rendering/render_table.cpp
WebCore/src/kdelibs/khtml/rendering/render_table.h
WebCore/src/kdelibs/khtml/rendering/render_text.cpp
WebCore/src/kdelibs/khtml/rendering/render_text.h
WebCore/src/kdelibs/khtml/xml/dom2_eventsimpl.cpp
WebCore/src/kdelibs/khtml/xml/dom2_eventsimpl.h
WebCore/src/kdelibs/khtml/xml/dom2_rangeimpl.h
WebCore/src/kdelibs/khtml/xml/dom2_traversalimpl.h
WebCore/src/kdelibs/khtml/xml/dom2_viewsimpl.cpp
WebCore/src/kdelibs/khtml/xml/dom2_viewsimpl.h
WebCore/src/kdelibs/khtml/xml/dom_docimpl.cpp
WebCore/src/kdelibs/khtml/xml/dom_docimpl.h
WebCore/src/kdelibs/khtml/xml/dom_elementimpl.cpp
WebCore/src/kdelibs/khtml/xml/dom_elementimpl.h
WebCore/src/kdelibs/khtml/xml/dom_nodeimpl.cpp
WebCore/src/kdelibs/khtml/xml/dom_nodeimpl.h
WebCore/src/kdelibs/khtml/xml/dom_stringimpl.cpp
WebCore/src/kdelibs/khtml/xml/dom_stringimpl.h
WebCore/src/kdelibs/khtml/xml/dom_textimpl.h
WebCore/src/kdelibs/khtml/xml/dom_xmlimpl.h
WebCore/src/kdelibs/khtml/xml/xml_tokenizer.h
WebCore/src/kentities.gperf
WebCore/src/kwq/KWQApplication.mm
WebCore/src/kwq/KWQColorGroup.mm
WebCore/src/kwq/KWQEvent.mm
WebCore/src/kwq/KWQFont.mm
WebCore/src/kwq/KWQFontMetrics.mm
WebCore/src/kwq/KWQKGlobal.mm
WebCore/src/kwq/KWQKHTMLPart.h
WebCore/src/kwq/KWQKHTMLPart.mm
WebCore/src/kwq/KWQKHTMLSettings.mm
WebCore/src/kwq/KWQPainter.mm
WebCore/src/kwq/KWQScrollView.mm
WebCore/src/kwq/KWQStyle.h
WebCore/src/kwq/kdecore/klocale.h
WebCore/src/kwq/khtml/khtml_settings.h
WebCore/src/kwq/qt/qapplication.h
WebCore/src/kwq/qt/qevent.h
WebCore/src/kwq/qt/qfont.h
WebCore/src/kwq/qt/qfontmetrics.h
WebCore/src/kwq/qt/qnamespace.h
WebCore/src/kwq/qt/qpainter.h
WebCore/src/kwq/qt/qpalette.h
WebCore/src/kwq/qt/qscrollview.h
WebCore/src/kwq/qt/qtooltip.h
WebCore/src/libwebcore.exp
WebKit/ChangeLog
WebKit/ChangeLog-2002-12-03
WebKit/WebView.subproj/IFPreferences.h
WebKit/WebView.subproj/IFPreferences.mm
WebKit/WebView.subproj/IFWebView.mm
WebKit/WebView.subproj/WebFrameView.m
WebKit/WebView.subproj/WebPreferences.h
WebKit/WebView.subproj/WebPreferences.m

index 0d1f6606116f9f83679a7b4ceda3e853b1ed1a2b..8300a559b46534e63e9936887436d2c0a3894e89 100644 (file)
@@ -1,3 +1,20 @@
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       * kjs/internal.cpp:
+       * kjs/property_map.cpp:
+       * kjs/ustring.h:
+       Removed some unneeded <config.h> includes so we are more similar
+       to the real KDE sources.
+
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       Merged changes from KDE 3.0 final and did some build fixes.
+
+       * JavaScriptCore.pbproj/project.pbxproj: Added nodes2string.cpp.
+
+       * kjs/grammar.*: Regenerated.
+       * kjs/*.lut.h: Regenerated.
+
 2002-04-08  Darin Adler  <darin@apple.com>
 
        Reviwed by: Maciej Stachowiak  <mjs@apple.com>
index 0d1f6606116f9f83679a7b4ceda3e853b1ed1a2b..8300a559b46534e63e9936887436d2c0a3894e89 100644 (file)
@@ -1,3 +1,20 @@
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       * kjs/internal.cpp:
+       * kjs/property_map.cpp:
+       * kjs/ustring.h:
+       Removed some unneeded <config.h> includes so we are more similar
+       to the real KDE sources.
+
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       Merged changes from KDE 3.0 final and did some build fixes.
+
+       * JavaScriptCore.pbproj/project.pbxproj: Added nodes2string.cpp.
+
+       * kjs/grammar.*: Regenerated.
+       * kjs/*.lut.h: Regenerated.
+
 2002-04-08  Darin Adler  <darin@apple.com>
 
        Reviwed by: Maciej Stachowiak  <mjs@apple.com>
index 0d1f6606116f9f83679a7b4ceda3e853b1ed1a2b..8300a559b46534e63e9936887436d2c0a3894e89 100644 (file)
@@ -1,3 +1,20 @@
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       * kjs/internal.cpp:
+       * kjs/property_map.cpp:
+       * kjs/ustring.h:
+       Removed some unneeded <config.h> includes so we are more similar
+       to the real KDE sources.
+
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       Merged changes from KDE 3.0 final and did some build fixes.
+
+       * JavaScriptCore.pbproj/project.pbxproj: Added nodes2string.cpp.
+
+       * kjs/grammar.*: Regenerated.
+       * kjs/*.lut.h: Regenerated.
+
 2002-04-08  Darin Adler  <darin@apple.com>
 
        Reviwed by: Maciej Stachowiak  <mjs@apple.com>
index 357d9779244d2294d63f110788cf712b5fd021ba..0a4082b7162c3b3f12c0b500858da87fc9b2e531 100644 (file)
                                F692A8C10255597D01FF60F7,
                                F692A8C30255597D01FF60F7,
                                F692A8CB02555BA201FF60F7,
+                               F5FFE657026B47A6018635CA,
                        );
                        isa = PBXSourcesBuildPhase;
                };
                                F692A86C0255597D01FF60F7,
                                F692A86D0255597D01FF60F7,
                                F692A86E0255597D01FF60F7,
+                               F5FFE656026B47A6018635CA,
                                F692A8700255597D01FF60F7,
                                F692A8710255597D01FF60F7,
                                F692A8720255597D01FF60F7,
                        isa = PBXBuildStyle;
                        name = Unoptimized;
                };
+               F5FFE656026B47A6018635CA = {
+                       isa = PBXFileReference;
+                       name = nodes2string.cpp;
+                       path = kjs/nodes2string.cpp;
+                       refType = 4;
+               };
+               F5FFE657026B47A6018635CA = {
+                       fileRef = F5FFE656026B47A6018635CA;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
 //F50
 //F51
 //F52
index a8aa622fcbe459303679d9120a95c4e7bb17bf52..98d1771b9de8a1af2b6f1da34ee81afaf098254a 100644 (file)
@@ -58,7 +58,7 @@ void ArrayInstanceImp::put(ExecState *exec, const UString &propertyName, const V
       // shrink array
       for (unsigned int u = newLen; u < oldLen; u++) {
        UString p = UString::from(u);
-       if (hasProperty(exec, p, false))
+       if (hasOwnProperty(exec, p))
          deleteProperty(exec, p);
       }
       ObjectImp::put(exec, "length", Number(newLen), DontEnum | DontDelete);
@@ -74,7 +74,7 @@ void ArrayInstanceImp::put(ExecState *exec, const UString &propertyName, const V
     return;
 
   // do we need to update/create the length property ?
-  if (hasProperty(exec, "length", false)) {
+  if (hasOwnProperty(exec, "length")) {
     Value len = get(exec, "length");
     if (idx < len.toUInt32(exec))
       return;
@@ -87,6 +87,18 @@ void ArrayInstanceImp::putDirect(ExecState *exec, const UString &propertyName, c
 {
   ObjectImp::put(exec,propertyName,value,attr);
 }
+
+bool ArrayInstanceImp::hasOwnProperty(ExecState *exec,
+                                      const UString &propertyName)
+{
+  // disable this object's prototype temporarily for the hasProperty() call
+  Value protoBackup = prototype();
+  setPrototype(Undefined());
+  bool b = hasProperty(exec, propertyName);
+  setPrototype(protoBackup);
+  return b;
+}
+
 // ------------------------------ ArrayPrototypeImp ----------------------------
 
 const ClassInfo ArrayPrototypeImp::info = {"Array", &ArrayInstanceImp::info, &arrayTable, 0};
index 17641d104c7c945e46d9729e52c100d1f3af4b57..ee403460e8e879389d287122ce8d2c49f52c6f3b 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #ifndef _ARRAY_OBJECT_H_
@@ -34,6 +33,11 @@ namespace KJS {
 
     virtual void put(ExecState *exec, const UString &propertyName, const Value &value, int attr = None);
     virtual void putDirect(ExecState *exec, const UString &propertyName, const Value &value, int attr = None);
+    /**
+     * A shallow hasProperty() variant that doesn't look at the prototype's
+     * properties.
+     */
+    virtual bool hasOwnProperty(ExecState *exec, const UString &propertyName);
 
     virtual const ClassInfo *classInfo() const { return &info; }
     static const ClassInfo info;
index c395179c4c6c0541890d8e2f2c842e593df02671..e5880f9c4acfe07adf05f8cddd765708cbf42acc 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #ifndef _BOOL_OBJECT_H_
index 2bed7e1eafb4abfc436f991bf1345db6a180c09d..5633b98a8a5ad15fbd4280c1d71c44fb7d7422ef 100644 (file)
@@ -18,7 +18,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #include "collector.h"
index 86cc2100988793d279318f51c000e02c1f86d083..4bf4cbba34905ac2ff521da81b6daac7d13bd7e1 100644 (file)
@@ -18,7 +18,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #ifndef _KJSCOLLECTOR_H_
@@ -80,7 +79,9 @@ namespace KJS {
     static bool outOfMemory() { return memLimitReached; }
 
 #ifdef KJS_DEBUG_MEM
-    /** Check that nothing is left when the last interpreter gets deleted */
+    /**
+     * Check that nothing is left when the last interpreter gets deleted
+     */
     static void finalCheck();
     /**
      * @internal
index c3f757884ae565d535027a7a3cf8788d3f8baa10..37157368f5d46b437a5b82e1cb6cccc9461b452f 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #ifdef HAVE_CONFIG_H
@@ -174,8 +173,8 @@ Value DateProtoFuncImp::call(ExecState *exec, Object &thisObj, const List &args)
   UString s;
   const int bufsize=100;
   char timebuffer[bufsize];
-  char *oldlocale = setlocale(LC_TIME,NULL);
-  if (!oldlocale)
+  CString oldlocale = setlocale(LC_TIME,NULL);
+  if (!oldlocale.c_str())
     oldlocale = setlocale(LC_ALL, NULL);
   Value v = thisObj.internalValue();
   double milli = v.toNumber(exec);
@@ -205,7 +204,7 @@ Value DateProtoFuncImp::call(ExecState *exec, Object &thisObj, const List &args)
       t = gmtime(&tv);
       strftime(timebuffer, bufsize, "%a, %d-%b-%y %H:%M:%S %Z", t);
     }
-    setlocale(LC_TIME,oldlocale);
+    setlocale(LC_TIME,oldlocale.c_str());
     result = String(timebuffer);
     break;
   case ToLocaleString:
index e20a4215a912146af1a61bc43d36fb7391eae386..b4a13071713a3d883b100b0592c93d97e6f6e662 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #ifndef _DATE_OBJECT_H_
@@ -26,6 +25,8 @@
 #include "internal.h"
 #include "function_object.h"
 
+#include <sys/time.h>
+
 namespace KJS {
 
   class DateInstanceImp : public ObjectImp {
@@ -119,7 +120,7 @@ namespace KJS {
 
   // helper functions
   Value parseDate(const String &s);
-  time_t KRFCDate_parseDate(const UString &_date);
+  time_t KRFCDate_parseDate(const UString &_date); 
   Value timeClip(const Value &t);
 
 }; // namespace
index 8ce7d810f5484fb15fcfa61a6610cfdbc8dc098f..8ba31751697a909db6b7830c62786c07fe35a8fa 100644 (file)
@@ -18,7 +18,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #include "debugger.h"
index 92bc870c1acc0dd2a6b7c3e19e3eab2528a2ec25..d3b6237050e0f70839bb9eb6f44ea1c5398dda2a 100644 (file)
@@ -18,7 +18,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #ifndef _KJSDEBUGGER_H_
index 0bfba1d6744bba870b6a6c618e1ca68cc93dd17a..c258077bcbb16bd542be21924350e86d150ab884 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #ifndef _ERROR_OBJECT_H_
index 51382f8c013d25e4c9ca59261ff430c5c2dc1ae0..d918d7a91475dbe0f037cffa244f15492c3eca36 100644 (file)
@@ -57,15 +57,19 @@ FunctionImp::FunctionImp(ExecState *exec, const UString &n)
 {
   Value protect(this);
   argStack = new ListImp();
+  Value protectArgStack( argStack ); // this also calls setGcAllowed on argStack
+  //fprintf(stderr,"FunctionImp::FunctionImp this=%p argStack=%p\n");
   put(exec,"arguments",Null(),ReadOnly|DontDelete|DontEnum);
 }
 
 FunctionImp::~FunctionImp()
 {
-  argStack->setGcAllowed();
   // The function shouldn't be deleted while it is still executed; argStack
   // should be set to 0 by the last call to popArgs()
-  assert(argStack->isEmpty());
+  //assert(argStack->isEmpty());
+  // Accessing argStack from here is a problem though.
+  // When the function isn't used anymore, it's not marked, and neither is the
+  // argStack, so both can be deleted - in any order!
   delete param;
 }
 
@@ -171,6 +175,20 @@ void FunctionImp::addParameter(const UString &n)
   *p = new Parameter(n);
 }
 
+UString FunctionImp::parameterString() const
+{
+  UString s;
+  const Parameter * const *p = &param;
+  while (*p) {
+    if (!s.isEmpty())
+        s += ", ";
+    s += (*p)->name;
+    p = &(*p)->next;
+  }
+
+  return s;
+}
+
 
 // ECMA 10.1.3q
 void FunctionImp::processParameters(ExecState *exec, const List &args)
index 56d349163bef8ae2772bafbeb6aa016df7b8f4fe..6602b185f9fb6db7b3361ac251dc7931e477c7c6 100644 (file)
@@ -18,7 +18,6 @@
  *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  *  Boston, MA 02111-1307, USA.
  *
- *  $Id$
  */
 
 #ifndef _KJS_FUNCTION_H_
@@ -46,6 +45,8 @@ namespace KJS {
     virtual Value call(ExecState *exec, Object &thisObj, const List &args);
 
     void addParameter(const UString &n);
+    // parameters in string representation, e.g. (a, b, c)
+    UString parameterString() const;
     virtual CodeType codeType() const = 0;
 
     virtual Completion execute(ExecState *exec) = 0;
index d2e059fa2b0399aaed491320e1403180aaf213ce..c0e0429261e693c7b44c002fa6f4804c68c26486 100644 (file)
@@ -83,7 +83,6 @@ Value FunctionProtoFuncImp::call(ExecState *exec, Object &thisObj, const List &a
   switch (id) {
   case ToString: {
     // ### also make this work for internal functions
-    // ### return the text of the function body (see 15.3.4.2)
     if (thisObj.isNull() || !thisObj.inherits(&InternalFunctionImp::info)) {
 #ifndef NDEBUG
       fprintf(stderr,"attempted toString() call on null or non-function object\n");
@@ -92,7 +91,12 @@ Value FunctionProtoFuncImp::call(ExecState *exec, Object &thisObj, const List &a
       exec->setException(err);
       return err;
     }
-    if (thisObj.inherits(&FunctionImp::info) &&
+    if (thisObj.inherits(&DeclaredFunctionImp::info)) {
+       DeclaredFunctionImp *fi = static_cast<DeclaredFunctionImp*>
+                                 (thisObj.imp());
+       return String("function " + fi->name() + "(" +
+         fi->parameterString() + ") " + fi->body->toString());
+    } else if (thisObj.inherits(&FunctionImp::info) &&
         !static_cast<FunctionImp*>(thisObj.imp())->name().isNull()) {
       result = String("function " + static_cast<FunctionImp*>(thisObj.imp())->name() + "()");
     }
@@ -126,7 +130,7 @@ Value FunctionProtoFuncImp::call(ExecState *exec, Object &thisObj, const List &a
 
         Object argArrayObj = Object::dynamicCast(argArray);
         unsigned int length = argArrayObj.get(exec,"length").toUInt32(exec);
-        for (uint i = 0; i < length; i++)
+        for (unsigned int i = 0; i < length; i++)
           applyArgs.append(argArrayObj.get(exec,UString::from(i)));
       }
       else {
index 8e6156e635626749a3137bbaf212b34ac30458d9..32d86c9030f1085484aab04929bbdb5f70e18610 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #ifndef _FUNCTION_OBJECT_H_
index 1ceb32db89ca165996b694abd36854834d02ffd0..dc411a79ebbc09c4c05f589d0752d93fdf1379e7 100644 (file)
@@ -317,23 +317,23 @@ static const short yyrline[] = { 0,
    160,   162,   163,   164,   165,   166,   169,   175,   177,   179,
    180,   181,   182,   183,   186,   188,   189,   192,   194,   198,
    200,   203,   205,   208,   210,   214,   217,   218,   221,   223,
-   224,   225,   227,   230,   232,   235,   237,   238,   239,   242,
-   244,   247,   249,   252,   254,   257,   259,   260,   263,   265,
-   266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-   278,   280,   281,   282,   285,   287,   288,   291,   293,   294,
-   295,   298,   300,   302,   304,   306,   308,   310,   314,   316,
-   317,   318,   319,   322,   324,   327,   329,   332,   334,   337,
-   339,   343,   345,   349,   351,   355,   357,   361,   363,   364,
-   365,   366,   367,   368,   369,   370,   371,   372,   373,   376,
-   378,   381,   383,   384,   385,   386,   387,   388,   389,   390,
-   391,   392,   393,   394,   395,   398,   400,   403,   405,   408,
-   411,   420,   422,   426,   428,   431,   435,   439,   442,   449,
-   451,   455,   457,   458,   461,   464,   467,   471,   477,   479,
-   482,   484,   488,   490,   497,   499,   503,   505,   513,   515,
-   519,   520,   526,   531,   536,   538,   542,   544,   547,   549,
-   552,   554,   557,   559,   562,   568,   572,   574,   575,   578,
-   582,   586,   589,   593,   595,   600,   602,   606,   609,   613,
-   616,   620,   622,   625,   627
+   224,   225,   227,   230,   232,   235,   237,   238,   239,   243,
+   245,   248,   250,   253,   255,   258,   260,   261,   264,   266,
+   267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+   279,   281,   282,   283,   286,   288,   289,   292,   294,   295,
+   296,   299,   301,   303,   305,   307,   309,   311,   315,   317,
+   318,   319,   320,   323,   325,   328,   330,   333,   335,   338,
+   340,   344,   346,   350,   352,   356,   358,   362,   364,   365,
+   366,   367,   368,   369,   370,   371,   372,   373,   374,   377,
+   379,   382,   384,   385,   386,   387,   388,   389,   390,   391,
+   392,   393,   394,   395,   396,   399,   401,   404,   406,   409,
+   412,   421,   423,   427,   429,   432,   436,   440,   443,   450,
+   452,   456,   458,   459,   462,   465,   468,   472,   478,   480,
+   483,   485,   489,   491,   498,   500,   504,   506,   514,   516,
+   520,   521,   527,   532,   537,   539,   543,   545,   548,   550,
+   553,   555,   558,   560,   563,   569,   573,   575,   576,   579,
+   583,   587,   590,   594,   596,   601,   603,   607,   610,   614,
+   617,   621,   623,   626,   628
 };
 #endif
 
@@ -1464,251 +1464,252 @@ case 38:
     break;}
 case 39:
 #line 239 "grammar.y"
-{ yyval.node = new AccessorNode2(yyvsp[-2].node, yyvsp[0].ustr); ;
+{ yyval.node = new AccessorNode2(yyvsp[-2].node, yyvsp[0].ustr);
+                                     delete yyvsp[0].ustr; ;
     break;}
 case 40:
-#line 243 "grammar.y"
+#line 244 "grammar.y"
 { yyval.args = new ArgumentsNode(0L); ;
     break;}
 case 41:
-#line 244 "grammar.y"
+#line 245 "grammar.y"
 { yyval.args = new ArgumentsNode(yyvsp[-1].alist); ;
     break;}
 case 42:
-#line 248 "grammar.y"
+#line 249 "grammar.y"
 { yyval.alist = new ArgumentListNode(yyvsp[0].node); ;
     break;}
 case 43:
-#line 249 "grammar.y"
+#line 250 "grammar.y"
 { yyval.alist = new ArgumentListNode(yyvsp[-2].alist, yyvsp[0].node); ;
     break;}
 case 47:
-#line 259 "grammar.y"
+#line 260 "grammar.y"
 { yyval.node = new PostfixNode(yyvsp[-1].node, OpPlusPlus); ;
     break;}
 case 48:
-#line 260 "grammar.y"
+#line 261 "grammar.y"
 { yyval.node = new PostfixNode(yyvsp[-1].node, OpMinusMinus); ;
     break;}
 case 50:
-#line 265 "grammar.y"
+#line 266 "grammar.y"
 { yyval.node = new DeleteNode(yyvsp[0].node); ;
     break;}
 case 51:
-#line 266 "grammar.y"
+#line 267 "grammar.y"
 { yyval.node = new VoidNode(yyvsp[0].node); ;
     break;}
 case 52:
-#line 267 "grammar.y"
+#line 268 "grammar.y"
 { yyval.node = new TypeOfNode(yyvsp[0].node); ;
     break;}
 case 53:
-#line 268 "grammar.y"
+#line 269 "grammar.y"
 { yyval.node = new PrefixNode(OpPlusPlus, yyvsp[0].node); ;
     break;}
 case 54:
-#line 269 "grammar.y"
+#line 270 "grammar.y"
 { yyval.node = new PrefixNode(OpPlusPlus, yyvsp[0].node); ;
     break;}
 case 55:
-#line 270 "grammar.y"
+#line 271 "grammar.y"
 { yyval.node = new PrefixNode(OpMinusMinus, yyvsp[0].node); ;
     break;}
 case 56:
-#line 271 "grammar.y"
+#line 272 "grammar.y"
 { yyval.node = new PrefixNode(OpMinusMinus, yyvsp[0].node); ;
     break;}
 case 57:
-#line 272 "grammar.y"
+#line 273 "grammar.y"
 { yyval.node = new UnaryPlusNode(yyvsp[0].node); ;
     break;}
 case 58:
-#line 273 "grammar.y"
+#line 274 "grammar.y"
 { yyval.node = new NegateNode(yyvsp[0].node); ;
     break;}
 case 59:
-#line 274 "grammar.y"
+#line 275 "grammar.y"
 { yyval.node = new BitwiseNotNode(yyvsp[0].node); ;
     break;}
 case 60:
-#line 275 "grammar.y"
+#line 276 "grammar.y"
 { yyval.node = new LogicalNotNode(yyvsp[0].node); ;
     break;}
 case 62:
-#line 280 "grammar.y"
+#line 281 "grammar.y"
 { yyval.node = new MultNode(yyvsp[-2].node, yyvsp[0].node, '*'); ;
     break;}
 case 63:
-#line 281 "grammar.y"
+#line 282 "grammar.y"
 { yyval.node = new MultNode(yyvsp[-2].node, yyvsp[0].node, '/'); ;
     break;}
 case 64:
-#line 282 "grammar.y"
+#line 283 "grammar.y"
 { yyval.node = new MultNode(yyvsp[-2].node,yyvsp[0].node,'%'); ;
     break;}
 case 66:
-#line 287 "grammar.y"
+#line 288 "grammar.y"
 { yyval.node = new AddNode(yyvsp[-2].node, yyvsp[0].node, '+'); ;
     break;}
 case 67:
-#line 288 "grammar.y"
+#line 289 "grammar.y"
 { yyval.node = new AddNode(yyvsp[-2].node, yyvsp[0].node, '-'); ;
     break;}
 case 69:
-#line 293 "grammar.y"
+#line 294 "grammar.y"
 { yyval.node = new ShiftNode(yyvsp[-2].node, OpLShift, yyvsp[0].node); ;
     break;}
 case 70:
-#line 294 "grammar.y"
+#line 295 "grammar.y"
 { yyval.node = new ShiftNode(yyvsp[-2].node, OpRShift, yyvsp[0].node); ;
     break;}
 case 71:
-#line 295 "grammar.y"
+#line 296 "grammar.y"
 { yyval.node = new ShiftNode(yyvsp[-2].node, OpURShift, yyvsp[0].node); ;
     break;}
 case 73:
-#line 301 "grammar.y"
+#line 302 "grammar.y"
 { yyval.node = new RelationalNode(yyvsp[-2].node, OpLess, yyvsp[0].node); ;
     break;}
 case 74:
-#line 303 "grammar.y"
+#line 304 "grammar.y"
 { yyval.node = new RelationalNode(yyvsp[-2].node, OpGreater, yyvsp[0].node); ;
     break;}
 case 75:
-#line 305 "grammar.y"
+#line 306 "grammar.y"
 { yyval.node = new RelationalNode(yyvsp[-2].node, OpLessEq, yyvsp[0].node); ;
     break;}
 case 76:
-#line 307 "grammar.y"
+#line 308 "grammar.y"
 { yyval.node = new RelationalNode(yyvsp[-2].node, OpGreaterEq, yyvsp[0].node); ;
     break;}
 case 77:
-#line 309 "grammar.y"
+#line 310 "grammar.y"
 { yyval.node = new RelationalNode(yyvsp[-2].node, OpInstanceOf, yyvsp[0].node); ;
     break;}
 case 78:
-#line 311 "grammar.y"
+#line 312 "grammar.y"
 { yyval.node = new RelationalNode(yyvsp[-2].node, OpIn, yyvsp[0].node); ;
     break;}
 case 80:
-#line 316 "grammar.y"
+#line 317 "grammar.y"
 { yyval.node = new EqualNode(yyvsp[-2].node, OpEqEq, yyvsp[0].node); ;
     break;}
 case 81:
-#line 317 "grammar.y"
+#line 318 "grammar.y"
 { yyval.node = new EqualNode(yyvsp[-2].node, OpNotEq, yyvsp[0].node); ;
     break;}
 case 82:
-#line 318 "grammar.y"
+#line 319 "grammar.y"
 { yyval.node = new EqualNode(yyvsp[-2].node, OpStrEq, yyvsp[0].node); ;
     break;}
 case 83:
-#line 319 "grammar.y"
+#line 320 "grammar.y"
 { yyval.node = new EqualNode(yyvsp[-2].node, OpStrNEq, yyvsp[0].node);;
     break;}
 case 85:
-#line 324 "grammar.y"
+#line 325 "grammar.y"
 { yyval.node = new BitOperNode(yyvsp[-2].node, OpBitAnd, yyvsp[0].node); ;
     break;}
 case 87:
-#line 329 "grammar.y"
+#line 330 "grammar.y"
 { yyval.node = new BitOperNode(yyvsp[-2].node, OpBitXOr, yyvsp[0].node); ;
     break;}
 case 89:
-#line 334 "grammar.y"
+#line 335 "grammar.y"
 { yyval.node = new BitOperNode(yyvsp[-2].node, OpBitOr, yyvsp[0].node); ;
     break;}
 case 91:
-#line 340 "grammar.y"
+#line 341 "grammar.y"
 { yyval.node = new BinaryLogicalNode(yyvsp[-2].node, OpAnd, yyvsp[0].node); ;
     break;}
 case 93:
-#line 346 "grammar.y"
+#line 347 "grammar.y"
 { yyval.node = new BinaryLogicalNode(yyvsp[-2].node, OpOr, yyvsp[0].node); ;
     break;}
 case 95:
-#line 352 "grammar.y"
+#line 353 "grammar.y"
 { yyval.node = new ConditionalNode(yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ;
     break;}
 case 97:
-#line 358 "grammar.y"
+#line 359 "grammar.y"
 { yyval.node = new AssignNode(yyvsp[-2].node, yyvsp[-1].op, yyvsp[0].node);;
     break;}
 case 98:
-#line 362 "grammar.y"
+#line 363 "grammar.y"
 { yyval.op = OpEqual; ;
     break;}
 case 99:
-#line 363 "grammar.y"
+#line 364 "grammar.y"
 { yyval.op = OpPlusEq; ;
     break;}
 case 100:
-#line 364 "grammar.y"
+#line 365 "grammar.y"
 { yyval.op = OpMinusEq; ;
     break;}
 case 101:
-#line 365 "grammar.y"
+#line 366 "grammar.y"
 { yyval.op = OpMultEq; ;
     break;}
 case 102:
-#line 366 "grammar.y"
+#line 367 "grammar.y"
 { yyval.op = OpDivEq; ;
     break;}
 case 103:
-#line 367 "grammar.y"
+#line 368 "grammar.y"
 { yyval.op = OpLShift; ;
     break;}
 case 104:
-#line 368 "grammar.y"
+#line 369 "grammar.y"
 { yyval.op = OpRShift; ;
     break;}
 case 105:
-#line 369 "grammar.y"
+#line 370 "grammar.y"
 { yyval.op = OpURShift; ;
     break;}
 case 106:
-#line 370 "grammar.y"
+#line 371 "grammar.y"
 { yyval.op = OpAndEq; ;
     break;}
 case 107:
-#line 371 "grammar.y"
+#line 372 "grammar.y"
 { yyval.op = OpXOrEq; ;
     break;}
 case 108:
-#line 372 "grammar.y"
+#line 373 "grammar.y"
 { yyval.op = OpOrEq; ;
     break;}
 case 109:
-#line 373 "grammar.y"
+#line 374 "grammar.y"
 { yyval.op = OpModEq; ;
     break;}
 case 111:
-#line 378 "grammar.y"
+#line 379 "grammar.y"
 { yyval.node = new CommaNode(yyvsp[-2].node, yyvsp[0].node); ;
     break;}
 case 126:
-#line 399 "grammar.y"
+#line 400 "grammar.y"
 { yyval.stat = new BlockNode(0L); DBG(yyval.stat, yylsp[0], yylsp[0]); ;
     break;}
 case 127:
-#line 400 "grammar.y"
+#line 401 "grammar.y"
 { yyval.stat = new BlockNode(yyvsp[-1].srcs); DBG(yyval.stat, yylsp[0], yylsp[0]); ;
     break;}
 case 128:
-#line 404 "grammar.y"
+#line 405 "grammar.y"
 { yyval.slist = new StatListNode(yyvsp[0].stat); ;
     break;}
 case 129:
-#line 405 "grammar.y"
+#line 406 "grammar.y"
 { yyval.slist = new StatListNode(yyvsp[-1].slist, yyvsp[0].stat); ;
     break;}
 case 130:
-#line 409 "grammar.y"
+#line 410 "grammar.y"
 { yyval.stat = new VarStatementNode(yyvsp[-1].vlist);
                                       DBG(yyval.stat, yylsp[-2], yylsp[0]); ;
     break;}
 case 131:
-#line 411 "grammar.y"
+#line 412 "grammar.y"
 { if (automatic()) {
                                           yyval.stat = new VarStatementNode(yyvsp[-1].vlist);
                                          DBG(yyval.stat, yylsp[-2], yylsp[-1]);
@@ -1718,36 +1719,36 @@ case 131:
                                       ;
     break;}
 case 132:
-#line 421 "grammar.y"
+#line 422 "grammar.y"
 { yyval.vlist = new VarDeclListNode(yyvsp[0].decl); ;
     break;}
 case 133:
-#line 423 "grammar.y"
+#line 424 "grammar.y"
 { yyval.vlist = new VarDeclListNode(yyvsp[-2].vlist, yyvsp[0].decl); ;
     break;}
 case 134:
-#line 427 "grammar.y"
+#line 428 "grammar.y"
 { yyval.decl = new VarDeclNode(yyvsp[0].ustr, 0); delete yyvsp[0].ustr; ;
     break;}
 case 135:
-#line 428 "grammar.y"
+#line 429 "grammar.y"
 { yyval.decl = new VarDeclNode(yyvsp[-1].ustr, yyvsp[0].init); delete yyvsp[-1].ustr; ;
     break;}
 case 136:
-#line 432 "grammar.y"
+#line 433 "grammar.y"
 { yyval.init = new AssignExprNode(yyvsp[0].node); ;
     break;}
 case 137:
-#line 436 "grammar.y"
+#line 437 "grammar.y"
 { yyval.stat = new EmptyStatementNode(); ;
     break;}
 case 138:
-#line 440 "grammar.y"
+#line 441 "grammar.y"
 { yyval.stat = new ExprStatementNode(yyvsp[-1].node);
                                      DBG(yyval.stat, yylsp[-1], yylsp[0]); ;
     break;}
 case 139:
-#line 442 "grammar.y"
+#line 443 "grammar.y"
 { if (automatic()) {
                                        yyval.stat = new ExprStatementNode(yyvsp[-1].node);
                                       DBG(yyval.stat, yylsp[-1], yylsp[-1]);
@@ -1755,70 +1756,70 @@ case 139:
                                       YYABORT; ;
     break;}
 case 140:
-#line 450 "grammar.y"
+#line 451 "grammar.y"
 { yyval.stat = new IfNode(yyvsp[-2].node,yyvsp[0].stat,0L);DBG(yyval.stat,yylsp[-4],yylsp[-1]); ;
     break;}
 case 141:
-#line 452 "grammar.y"
+#line 453 "grammar.y"
 { yyval.stat = new IfNode(yyvsp[-4].node,yyvsp[-2].stat,yyvsp[0].stat);DBG(yyval.stat,yylsp[-6],yylsp[-3]); ;
     break;}
 case 142:
-#line 456 "grammar.y"
+#line 457 "grammar.y"
 { yyval.stat=new DoWhileNode(yyvsp[-4].stat,yyvsp[-1].node);DBG(yyval.stat,yylsp[-5],yylsp[-3]);;
     break;}
 case 143:
-#line 457 "grammar.y"
+#line 458 "grammar.y"
 { yyval.stat = new WhileNode(yyvsp[-2].node,yyvsp[0].stat);DBG(yyval.stat,yylsp[-4],yylsp[-1]); ;
     break;}
 case 144:
-#line 459 "grammar.y"
+#line 460 "grammar.y"
 { yyval.stat = new ForNode(yyvsp[-6].node,yyvsp[-4].node,yyvsp[-2].node,yyvsp[0].stat);
                                     DBG(yyval.stat,yylsp[-8],yylsp[-1]); ;
     break;}
 case 145:
-#line 462 "grammar.y"
+#line 463 "grammar.y"
 { yyval.stat = new ForNode(yyvsp[-6].vlist,yyvsp[-4].node,yyvsp[-2].node,yyvsp[0].stat);
                                     DBG(yyval.stat,yylsp[-9],yylsp[-1]); ;
     break;}
 case 146:
-#line 465 "grammar.y"
+#line 466 "grammar.y"
 { yyval.stat = new ForInNode(yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].stat);
                                     DBG(yyval.stat,yylsp[-6],yylsp[-1]); ;
     break;}
 case 147:
-#line 468 "grammar.y"
+#line 469 "grammar.y"
 { yyval.stat = new ForInNode(yyvsp[-4].ustr,0L,yyvsp[-2].node,yyvsp[0].stat);
                                     DBG(yyval.stat,yylsp[-7],yylsp[-1]);
                                      delete yyvsp[-4].ustr; ;
     break;}
 case 148:
-#line 472 "grammar.y"
+#line 473 "grammar.y"
 { yyval.stat = new ForInNode(yyvsp[-5].ustr,yyvsp[-4].init,yyvsp[-2].node,yyvsp[0].stat);
                                     DBG(yyval.stat,yylsp[-8],yylsp[-1]);
                                      delete yyvsp[-5].ustr; ;
     break;}
 case 149:
-#line 478 "grammar.y"
+#line 479 "grammar.y"
 { yyval.node = 0L; ;
     break;}
 case 151:
-#line 483 "grammar.y"
+#line 484 "grammar.y"
 { yyval.stat = new ContinueNode(); DBG(yyval.stat,yylsp[-1],yylsp[0]); ;
     break;}
 case 152:
-#line 484 "grammar.y"
+#line 485 "grammar.y"
 { if (automatic()) {
                                        yyval.stat = new ContinueNode(); DBG(yyval.stat,yylsp[-1],yylsp[0]);
                                      } else
                                       YYABORT; ;
     break;}
 case 153:
-#line 488 "grammar.y"
+#line 489 "grammar.y"
 { yyval.stat = new ContinueNode(yyvsp[-1].ustr); DBG(yyval.stat,yylsp[-2],yylsp[0]);
                                      delete yyvsp[-1].ustr; ;
     break;}
 case 154:
-#line 490 "grammar.y"
+#line 491 "grammar.y"
 { if (automatic()) {
                                        yyval.stat = new ContinueNode(yyvsp[-1].ustr);DBG(yyval.stat,yylsp[-2],yylsp[-1]);
                                       delete yyvsp[-1].ustr;
@@ -1826,23 +1827,23 @@ case 154:
                                       YYABORT; ;
     break;}
 case 155:
-#line 498 "grammar.y"
+#line 499 "grammar.y"
 { yyval.stat = new BreakNode();DBG(yyval.stat,yylsp[-1],yylsp[0]); ;
     break;}
 case 156:
-#line 499 "grammar.y"
+#line 500 "grammar.y"
 { if (automatic()) {
                                        yyval.stat = new BreakNode(); DBG(yyval.stat,yylsp[-1],yylsp[-1]);
                                      } else
                                       YYABORT; ;
     break;}
 case 157:
-#line 503 "grammar.y"
+#line 504 "grammar.y"
 { yyval.stat = new BreakNode(yyvsp[-1].ustr); DBG(yyval.stat,yylsp[-2],yylsp[0]);
                                      delete yyvsp[-1].ustr; ;
     break;}
 case 158:
-#line 505 "grammar.y"
+#line 506 "grammar.y"
 { if (automatic()) {
                                        yyval.stat = new BreakNode(yyvsp[-1].ustr); DBG(yyval.stat,yylsp[-2],yylsp[-1]);
                                       delete yyvsp[-1].ustr;
@@ -1851,164 +1852,164 @@ case 158:
                                    ;
     break;}
 case 159:
-#line 514 "grammar.y"
+#line 515 "grammar.y"
 { yyval.stat = new ReturnNode(0L); DBG(yyval.stat,yylsp[-1],yylsp[0]); ;
     break;}
 case 160:
-#line 515 "grammar.y"
+#line 516 "grammar.y"
 { if (automatic()) {
                                        yyval.stat = new ReturnNode(0L); DBG(yyval.stat,yylsp[-1],yylsp[-1]);
                                      } else
                                       YYABORT; ;
     break;}
 case 161:
-#line 519 "grammar.y"
+#line 520 "grammar.y"
 { yyval.stat = new ReturnNode(yyvsp[-1].node); ;
     break;}
 case 162:
-#line 520 "grammar.y"
+#line 521 "grammar.y"
 { if (automatic())
                                        yyval.stat = new ReturnNode(yyvsp[-1].node);
                                      else
                                       YYABORT; ;
     break;}
 case 163:
-#line 527 "grammar.y"
+#line 528 "grammar.y"
 { yyval.stat = new WithNode(yyvsp[-2].node,yyvsp[0].stat);
                                      DBG(yyval.stat, yylsp[-4], yylsp[-1]); ;
     break;}
 case 164:
-#line 532 "grammar.y"
+#line 533 "grammar.y"
 { yyval.stat = new SwitchNode(yyvsp[-2].node, yyvsp[0].cblk);
                                      DBG(yyval.stat, yylsp[-4], yylsp[-1]); ;
     break;}
 case 165:
-#line 537 "grammar.y"
+#line 538 "grammar.y"
 { yyval.cblk = new CaseBlockNode(yyvsp[-1].clist, 0L, 0L); ;
     break;}
 case 166:
-#line 539 "grammar.y"
+#line 540 "grammar.y"
 { yyval.cblk = new CaseBlockNode(yyvsp[-3].clist, yyvsp[-2].ccl, yyvsp[-1].clist); ;
     break;}
 case 167:
-#line 543 "grammar.y"
+#line 544 "grammar.y"
 { yyval.clist = 0L; ;
     break;}
 case 169:
-#line 548 "grammar.y"
+#line 549 "grammar.y"
 { yyval.clist = new ClauseListNode(yyvsp[0].ccl); ;
     break;}
 case 170:
-#line 549 "grammar.y"
+#line 550 "grammar.y"
 { yyval.clist = yyvsp[-1].clist->append(yyvsp[0].ccl); ;
     break;}
 case 171:
-#line 553 "grammar.y"
+#line 554 "grammar.y"
 { yyval.ccl = new CaseClauseNode(yyvsp[-1].node, 0L); ;
     break;}
 case 172:
-#line 554 "grammar.y"
+#line 555 "grammar.y"
 { yyval.ccl = new CaseClauseNode(yyvsp[-2].node, yyvsp[0].slist); ;
     break;}
 case 173:
-#line 558 "grammar.y"
+#line 559 "grammar.y"
 { yyval.ccl = new CaseClauseNode(0L, 0L);; ;
     break;}
 case 174:
-#line 559 "grammar.y"
+#line 560 "grammar.y"
 { yyval.ccl = new CaseClauseNode(0L, yyvsp[0].slist); ;
     break;}
 case 175:
-#line 563 "grammar.y"
+#line 564 "grammar.y"
 { yyvsp[0].stat->pushLabel(yyvsp[-2].ustr);
                                      yyval.stat = new LabelNode(yyvsp[-2].ustr, yyvsp[0].stat);
                                      delete yyvsp[-2].ustr; ;
     break;}
 case 176:
-#line 569 "grammar.y"
+#line 570 "grammar.y"
 { yyval.stat = new ThrowNode(yyvsp[-1].node); ;
     break;}
 case 177:
-#line 573 "grammar.y"
+#line 574 "grammar.y"
 { yyval.stat = new TryNode(yyvsp[-1].stat, yyvsp[0].node); ;
     break;}
 case 178:
-#line 574 "grammar.y"
+#line 575 "grammar.y"
 { yyval.stat = new TryNode(yyvsp[-1].stat, 0L, yyvsp[0].node); ;
     break;}
 case 179:
-#line 575 "grammar.y"
+#line 576 "grammar.y"
 { yyval.stat = new TryNode(yyvsp[-2].stat, yyvsp[-1].node, yyvsp[0].node); ;
     break;}
 case 180:
-#line 579 "grammar.y"
+#line 580 "grammar.y"
 { yyval.node = new CatchNode(yyvsp[-2].ustr, yyvsp[0].stat); delete yyvsp[-2].ustr; ;
     break;}
 case 181:
-#line 583 "grammar.y"
+#line 584 "grammar.y"
 { yyval.node = new FinallyNode(yyvsp[0].stat); ;
     break;}
 case 182:
-#line 587 "grammar.y"
+#line 588 "grammar.y"
 { yyval.func = new FuncDeclNode(yyvsp[-3].ustr, 0L, yyvsp[0].body);
                                              delete yyvsp[-3].ustr; ;
     break;}
 case 183:
-#line 590 "grammar.y"
+#line 591 "grammar.y"
 { yyval.func = new FuncDeclNode(yyvsp[-4].ustr, yyvsp[-2].param, yyvsp[0].body);
                                      delete yyvsp[-4].ustr; ;
     break;}
 case 184:
-#line 594 "grammar.y"
+#line 595 "grammar.y"
 { yyval.node = new FuncExprNode(0L, yyvsp[0].body); ;
     break;}
 case 185:
-#line 596 "grammar.y"
+#line 597 "grammar.y"
 { yyval.node = new FuncExprNode(yyvsp[-2].param, yyvsp[0].body); ;
     break;}
 case 186:
-#line 601 "grammar.y"
+#line 602 "grammar.y"
 { yyval.param = new ParameterNode(yyvsp[0].ustr); delete yyvsp[0].ustr; ;
     break;}
 case 187:
-#line 602 "grammar.y"
+#line 603 "grammar.y"
 { yyval.param = yyvsp[-2].param->append(yyvsp[0].ustr);
                                     delete yyvsp[0].ustr; ;
     break;}
 case 188:
-#line 607 "grammar.y"
+#line 608 "grammar.y"
 { yyval.body = new FunctionBodyNode(0L);
                                     DBG(yyval.body, yylsp[-1], yylsp[0]);;
     break;}
 case 189:
-#line 609 "grammar.y"
+#line 610 "grammar.y"
 { yyval.body = new FunctionBodyNode(yyvsp[-1].srcs);
                                     DBG(yyval.body, yylsp[-2], yylsp[0]);;
     break;}
 case 190:
-#line 614 "grammar.y"
+#line 615 "grammar.y"
 { yyval.prog = new ProgramNode(0L);
                                      Parser::progNode = yyval.prog; ;
     break;}
 case 191:
-#line 616 "grammar.y"
+#line 617 "grammar.y"
 { yyval.prog = new ProgramNode(yyvsp[0].srcs);
                                      Parser::progNode = yyval.prog; ;
     break;}
 case 192:
-#line 621 "grammar.y"
+#line 622 "grammar.y"
 { yyval.srcs = new SourceElementsNode(yyvsp[0].src); ;
     break;}
 case 193:
-#line 622 "grammar.y"
+#line 623 "grammar.y"
 { yyval.srcs = new SourceElementsNode(yyvsp[-1].srcs, yyvsp[0].src); ;
     break;}
 case 194:
-#line 626 "grammar.y"
+#line 627 "grammar.y"
 { yyval.src = new SourceElementNode(yyvsp[0].stat); ;
     break;}
 case 195:
-#line 627 "grammar.y"
+#line 628 "grammar.y"
 { yyval.src = new SourceElementNode(yyvsp[0].func); ;
     break;}
 }
@@ -2233,7 +2234,7 @@ yyerrhandle:
     }
   return 1;
 }
-#line 630 "grammar.y"
+#line 631 "grammar.y"
 
 
 int yyerror (const char *)  /* Called by yyparse on error */
index 1e7d58f58c3033f79299114d84dc071533adf19a..fbda94723548f8ee36fed019784fa5007ac7a6a1 100644 (file)
@@ -236,7 +236,8 @@ CallExpr:
     MemberExpr Arguments           { $$ = new FunctionCallNode($1, $2); }
   | CallExpr Arguments             { $$ = new FunctionCallNode($1, $2); }
   | CallExpr '[' Expr ']'          { $$ = new AccessorNode1($1, $3); }
-  | CallExpr '.' IDENT             { $$ = new AccessorNode2($1, $3); }
+  | CallExpr '.' IDENT             { $$ = new AccessorNode2($1, $3);
+                                     delete $3; }
 ;
 
 Arguments:
index 42c0012d20d2d6e415ef9361021bfcb9fb67f69d..2aec51f5faa19380b31b4d83594467bac88e8b03 100644 (file)
@@ -21,8 +21,6 @@
  *
  */
 
-#include <config.h>
-
 #include <stdio.h>
 #include <math.h>
 #include <assert.h>
@@ -474,6 +472,9 @@ ListImp::~ListImp()
 
   clear();
   delete hook;
+
+  if ( emptyList == this )
+    emptyList = 0L;
 }
 
 void ListImp::mark()
@@ -757,11 +758,6 @@ void InterpreterImp::globalClear()
   BooleanImp::staticFalse->deref();
   BooleanImp::staticFalse->setGcAllowed();
   BooleanImp::staticFalse = 0L;
-#ifdef APPLE_CHANGES
-  ListImp::emptyList->setGcAllowed();
-  ListImp::emptyList->deref();
-  ListImp::emptyList = 0;
-#endif
 }
 
 InterpreterImp::InterpreterImp(Interpreter *interp, const Object &glob)
@@ -786,7 +782,13 @@ InterpreterImp::InterpreterImp(Interpreter *interp, const Object &glob)
   m_compatMode = Interpreter::NativeMode;
 
   // initialize properties of the global object
+  initGlobalObject();
 
+  recursion = 0;
+}
+
+void InterpreterImp::initGlobalObject()
+{
   // Contructor prototype objects (Object.prototype, Array.prototype etc)
 
   FunctionPrototypeImp *funcProto = new FunctionPrototypeImp(globExec);
@@ -909,8 +911,6 @@ InterpreterImp::InterpreterImp(Interpreter *interp, const Object &glob)
 
   // built-in objects
   global.put(globExec,"Math", Object(new MathObjectImp(globExec,objProto)), DontEnum);
-
-  recursion = 0;
 }
 
 InterpreterImp::~InterpreterImp()
index a6d095f1c986f50f2c7a32c1cd1b14a04786a675..a65a10adb8119ce5657ac88d4061cc2191b659e7 100644 (file)
@@ -349,6 +349,8 @@ namespace KJS {
     Object globalObject() const { return global; }
     Interpreter* interpreter() const { return m_interpreter; }
 
+    void initGlobalObject();
+
     void mark();
 
     ExecState *globalExec() { return globExec; }
index 1c97e086d3ca0ab588e82dd0ee561d791207fa6c..34dcd8574f3e986c9c2c892f2fb03370cf9ca4a6 100644 (file)
@@ -19,7 +19,6 @@
  *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  *  Boston, MA 02111-1307, USA.
  *
- *  $Id$
  */
 
 #include "value.h"
@@ -114,6 +113,11 @@ Object Interpreter::globalObject() const
   return rep->globalObject();
 }
 
+void Interpreter::initGlobalObject()
+{
+  rep->initGlobalObject();
+}
+
 ExecState *Interpreter::globalExec()
 {
   return rep->globalExec();
@@ -364,3 +368,5 @@ ExecState::ExecState(Interpreter *interp, ContextImp *con)
   rep = new ExecStateImp(interp,con);
 }
 
+void Interpreter::virtual_hook( int, void* )
+{ /*BASE::virtual_hook( id, data );*/ }
index 909afd8fbebf13c8a3db52d8b47c28320c50fd86..4f7106aee53b886c1e00ee884ff6a1aba9ba6415 100644 (file)
@@ -19,7 +19,6 @@
  *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  *  Boston, MA 02111-1307, USA.
  *
- *  $Id$
  */
 
 #ifndef _KJS_INTERPRETER_H_
@@ -114,7 +113,7 @@ namespace KJS {
    * Interpreter objects can be used to evaluate ECMAScript code. Each
    * interpreter has a global object which is used for the purposes of code
    * evaluation, and also provides access to built-in properties such as
-   " Object" and "Number".
+   " Object" and "Number".
    */
   class Interpreter {
   public:
@@ -148,6 +147,8 @@ namespace KJS {
      */
     Object globalObject() const;
 
+    void initGlobalObject();
+
     /**
      * Returns the execution state object which can be used to execute
      * scripts using this interpreter at a the "global" level, i.e. one
@@ -204,59 +205,95 @@ namespace KJS {
      */
     Object builtinObject() const;
 
-    /** Returns the builtin "Function" object. */
+    /**
+     * Returns the builtin "Function" object.
+     */
     Object builtinFunction() const;
 
-    /** Returns the builtin "Array" object. */
+    /**
+     * Returns the builtin "Array" object.
+     */
     Object builtinArray() const;
 
 
-    /** Returns the builtin "Boolean" object. */
+    /**
+     * Returns the builtin "Boolean" object.
+     */
     Object builtinBoolean() const;
 
-    /** Returns the builtin "String" object. */
+    /**
+     * Returns the builtin "String" object.
+     */
     Object builtinString() const;
 
-    /** Returns the builtin "Number" object. */
+    /**
+     * Returns the builtin "Number" object.
+     */
     Object builtinNumber() const;
 
-    /** Returns the builtin "Date" object. */
+    /**
+     * Returns the builtin "Date" object.
+     */
     Object builtinDate() const;
 
-    /** Returns the builtin "RegExp" object. */
+    /**
+     * Returns the builtin "RegExp" object.
+     */
     Object builtinRegExp() const;
 
-    /** Returns the builtin "Error" object. */
+    /**
+     * Returns the builtin "Error" object.
+     */
     Object builtinError() const;
 
-    /** Returns the builtin "Object.prototype" object. */
+    /**
+     * Returns the builtin "Object.prototype" object.
+     */
     Object builtinObjectPrototype() const;
 
-    /** Returns the builtin "Function.prototype" object. */
+    /**
+     * Returns the builtin "Function.prototype" object.
+     */
     Object builtinFunctionPrototype() const;
 
-    /** Returns the builtin "Array.prototype" object. */
+    /**
+     * Returns the builtin "Array.prototype" object.
+     */
     Object builtinArrayPrototype() const;
 
-    /** Returns the builtin "Boolean.prototype" object. */
+    /**
+     * Returns the builtin "Boolean.prototype" object.
+     */
     Object builtinBooleanPrototype() const;
 
-    /** Returns the builtin "String.prototype" object. */
+    /**
+     * Returns the builtin "String.prototype" object.
+     */
     Object builtinStringPrototype() const;
 
-    /** Returns the builtin "Number.prototype" object. */
+    /**
+     * Returns the builtin "Number.prototype" object.
+     */
     Object builtinNumberPrototype() const;
 
-    /** Returns the builtin "Date.prototype" object. */
+    /**
+     * Returns the builtin "Date.prototype" object.
+     */
     Object builtinDatePrototype() const;
 
-    /** Returns the builtin "RegExp.prototype" object. */
+    /**
+     * Returns the builtin "RegExp.prototype" object.
+     */
     Object builtinRegExpPrototype() const;
 
-    /** Returns the builtin "Error.prototype" object. */
+    /**
+     * Returns the builtin "Error.prototype" object.
+     */
     Object builtinErrorPrototype() const;
 
-    /** The initial value of "Error" global property */
+    /**
+     * The initial value of "Error" global property
+     */
     Object builtinEvalError() const;
     Object builtinRangeError() const;
     Object builtinReferenceError() const;
@@ -317,6 +354,8 @@ namespace KJS {
      * interpreter instance instead.
      */
     Interpreter operator=(const Interpreter&);
+  protected:
+    virtual void virtual_hook( int id, void* data );
   };
 
   /**
index cede3a95cd60e55f5472be66a3b96cbd43c78ee5..ce3b4fc4f49a3d37b7c1e096864ccde94b4d4f78 100644 (file)
@@ -18,7 +18,6 @@
  *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  *  Boston, MA 02111-1307, USA.
  *
- *  $Id$
  */
 
 #ifdef HAVE_CONFIG_H
@@ -52,7 +51,7 @@ static Lexer *currLexer = 0;
 
 #include "lexer.lut.h"
 
-extern YYLTYPE yylloc; // global bison variable holding token info
+extern YYLTYPE yylloc; // global bison variable holding token info
 
 // a bridge for yacc from the C world to C++
 int kjsyylex()
@@ -61,7 +60,7 @@ int kjsyylex()
 }
 
 Lexer::Lexer()
-  : yylineno(0),
+  : yylineno(1),
     size8(128), size16(128), restrKeyword(false),
     eatNextIdentifier(false), stackToken(-1), lastToken(-1), pos(0),
     code(0), length(0),
@@ -94,7 +93,7 @@ Lexer *Lexer::curr()
 
 void Lexer::setCode(const UChar *c, unsigned int len)
 {
-  yylineno = 0;
+  yylineno = 1;
   restrKeyword = false;
   delimited = false;
   eatNextIdentifier = false;
@@ -127,6 +126,15 @@ void Lexer::shift(unsigned int p)
   }
 }
 
+// called on each new line
+void Lexer::nextLine()
+{
+  yylineno++;
+#ifndef KJS_PURE_ECMA
+  bol = true;
+#endif
+}
+
 void Lexer::setDone(State s)
 {
   state = s;
@@ -166,240 +174,234 @@ int Lexer::lex()
     switch (state) {
     case Start:
       if (isWhiteSpace()) {
-       // do nothing
+        // do nothing
       } else if (current == '/' && next1 == '/') {
-       shift(1);
-       state = InSingleLineComment;
+        shift(1);
+        state = InSingleLineComment;
       } else if (current == '/' && next1 == '*') {
-       shift(1);
-       state = InMultiLineComment;
+        shift(1);
+        state = InMultiLineComment;
       } else if (current == 0) {
-       if (!terminator && !delimited) {
-         // automatic semicolon insertion if program incomplete
-         token = ';';
-         stackToken = 0;
-         setDone(Other);
-       } else
-         setDone(Eof);
+        if (!terminator && !delimited) {
+          // automatic semicolon insertion if program incomplete
+          token = ';';
+          stackToken = 0;
+          setDone(Other);
+        } else
+          setDone(Eof);
       } else if (isLineTerminator()) {
-       yylineno++;
-#ifndef KJS_PURE_ECMA
-       bol = true;
-#endif
-       terminator = true;
-       if (restrKeyword) {
-         token = ';';
-         setDone(Other);
-       }
+        nextLine();
+        terminator = true;
+        if (restrKeyword) {
+          token = ';';
+          setDone(Other);
+        }
       } else if (current == '"' || current == '\'') {
-       state = InString;
-       stringType = current;
+        state = InString;
+        stringType = current;
       } else if (isIdentLetter(current)) {
-       record16(current);
-       state = InIdentifier;
+        record16(current);
+        state = InIdentifier;
       } else if (current == '0') {
-       record8(current);
-       state = InNum0;
+        record8(current);
+        state = InNum0;
       } else if (isDecimalDigit(current)) {
-       record8(current);
-       state = InNum;
+        record8(current);
+        state = InNum;
       } else if (current == '.' && isDecimalDigit(next1)) {
-       record8(current);
-       state = InDecimal;
+        record8(current);
+        state = InDecimal;
 #ifndef KJS_PURE_ECMA
-       // <!-- marks the beginning of a line comment (for www usage)
-      } else if (bol && current == '<' && next1 == '!' &&
-                next2 == '-' && next3 == '-') {
-       shift(3);
-       state = InSingleLineComment;
-       // same of -->
+        // <!-- marks the beginning of a line comment (for www usage)
+      } else if (current == '<' && next1 == '!' &&
+                 next2 == '-' && next3 == '-') {
+        shift(3);
+        state = InSingleLineComment;
+        // same for -->
       } else if (bol && current == '-' && next1 == '-' &&  next2 == '>') {
-       shift(2);
-       state = InSingleLineComment;
+        shift(2);
+        state = InSingleLineComment;
 #endif
       } else {
-       token = matchPunctuator(current, next1, next2, next3);
-       if (token != -1) {
-         setDone(Other);
-       } else {
-         //      cerr << "encountered unknown character" << endl;
-         setDone(Bad);
-       }
+        token = matchPunctuator(current, next1, next2, next3);
+        if (token != -1) {
+          setDone(Other);
+        } else {
+          //      cerr << "encountered unknown character" << endl;
+          setDone(Bad);
+        }
       }
       break;
     case InString:
       if (current == stringType) {
-       shift(1);
-       setDone(String);
+        shift(1);
+        setDone(String);
       } else if (current == 0 || isLineTerminator()) {
-       setDone(Bad);
+        setDone(Bad);
       } else if (current == '\\') {
-       state = InEscapeSequence;
+        state = InEscapeSequence;
       } else {
-       record16(current);
+        record16(current);
       }
       break;
     // Escape Sequences inside of strings
     case InEscapeSequence:
       if (isOctalDigit(current)) {
-       if (current >= '0' && current <= '3' &&
-           isOctalDigit(next1) && isOctalDigit(next2)) {
-         record16(convertOctal(current, next1, next2));
-         shift(2);
-         state = InString;
-       } else if (isOctalDigit(current) && isOctalDigit(next1)) {
-         record16(convertOctal('0', current, next1));
-         shift(1);
-         state = InString;
-       } else if (isOctalDigit(current)) {
-         record16(convertOctal('0', '0', current));
-         state = InString;
-       } else {
-         setDone(Bad);
-       }
+        if (current >= '0' && current <= '3' &&
+            isOctalDigit(next1) && isOctalDigit(next2)) {
+          record16(convertOctal(current, next1, next2));
+          shift(2);
+          state = InString;
+        } else if (isOctalDigit(current) && isOctalDigit(next1)) {
+          record16(convertOctal('0', current, next1));
+          shift(1);
+          state = InString;
+        } else if (isOctalDigit(current)) {
+          record16(convertOctal('0', '0', current));
+          state = InString;
+        } else {
+          setDone(Bad);
+        }
       } else if (current == 'x')
-       state = InHexEscape;
+        state = InHexEscape;
       else if (current == 'u')
-       state = InUnicodeEscape;
+        state = InUnicodeEscape;
       else {
-       record16(singleEscape(current));
-       state = InString;
+        record16(singleEscape(current));
+        state = InString;
       }
       break;
     case InHexEscape:
       if (isHexDigit(current) && isHexDigit(next1)) {
-       state = InString;
-       record16(convertHex(current, next1));
-       shift(1);
+        state = InString;
+        record16(convertHex(current, next1));
+        shift(1);
       } else if (current == stringType) {
-       record16('x');
-       shift(1);
-       setDone(String);
+        record16('x');
+        shift(1);
+        setDone(String);
       } else {
-       record16('x');
-       record16(current);
-       state = InString;
+        record16('x');
+        record16(current);
+        state = InString;
       }
       break;
     case InUnicodeEscape:
       if (isHexDigit(current) && isHexDigit(next1) &&
-         isHexDigit(next2) && isHexDigit(next3)) {
-       record16(convertUnicode(current, next1, next2, next3));
-       shift(3);
-       state = InString;
+          isHexDigit(next2) && isHexDigit(next3)) {
+        record16(convertUnicode(current, next1, next2, next3));
+        shift(3);
+        state = InString;
       } else if (current == stringType) {
-       record16('u');
-       shift(1);
-       setDone(String);
+        record16('u');
+        shift(1);
+        setDone(String);
       } else {
-       setDone(Bad);
+        setDone(Bad);
       }
       break;
     case InSingleLineComment:
       if (isLineTerminator()) {
-       yylineno++;
-       terminator = true;
-#ifndef KJS_PURE_ECMA
-       bol = true;
-#endif
-       if (restrKeyword) {
-         token = ';';
-         setDone(Other);
-       } else
-         state = Start;
+        nextLine();
+        terminator = true;
+        if (restrKeyword) {
+          token = ';';
+          setDone(Other);
+        } else
+          state = Start;
       } else if (current == 0) {
-       setDone(Eof);
+        setDone(Eof);
       }
       break;
     case InMultiLineComment:
       if (current == 0) {
-       setDone(Bad);
+        setDone(Bad);
       } else if (isLineTerminator()) {
-       yylineno++;
+        nextLine();
       } else if (current == '*' && next1 == '/') {
-       state = Start;
-       shift(1);
+        state = Start;
+        shift(1);
       }
       break;
     case InIdentifier:
       if (isIdentLetter(current) || isDecimalDigit(current)) {
-       record16(current);
-       break;
+        record16(current);
+        break;
       }
       setDone(Identifier);
       break;
     case InNum0:
       if (current == 'x' || current == 'X') {
-       record8(current);
-       state = InHex;
+        record8(current);
+        state = InHex;
       } else if (current == '.') {
-       record8(current);
-       state = InDecimal;
+        record8(current);
+        state = InDecimal;
       } else if (current == 'e' || current == 'E') {
-       record8(current);
-       state = InExponentIndicator;
+        record8(current);
+        state = InExponentIndicator;
       } else if (isOctalDigit(current)) {
-       record8(current);
-       state = InOctal;
+        record8(current);
+        state = InOctal;
       } else if (isDecimalDigit(current)) {
         record8(current);
         state = InDecimal;
       } else {
-       setDone(Number);
+        setDone(Number);
       }
       break;
     case InHex:
       if (isHexDigit(current)) {
-       record8(current);
+        record8(current);
       } else {
-       setDone(Hex);
+        setDone(Hex);
       }
       break;
     case InOctal:
       if (isOctalDigit(current)) {
-       record8(current);
+        record8(current);
       }
       else if (isDecimalDigit(current)) {
         record8(current);
         state = InDecimal;
       } else
-       setDone(Octal);
+        setDone(Octal);
       break;
     case InNum:
       if (isDecimalDigit(current)) {
-       record8(current);
+        record8(current);
       } else if (current == '.') {
-       record8(current);
-       state = InDecimal;
+        record8(current);
+        state = InDecimal;
       } else if (current == 'e' || current == 'E') {
-       record8(current);
-       state = InExponentIndicator;
+        record8(current);
+        state = InExponentIndicator;
       } else
-       setDone(Number);
+        setDone(Number);
       break;
     case InDecimal:
       if (isDecimalDigit(current)) {
-       record8(current);
+        record8(current);
       } else if (current == 'e' || current == 'E') {
-       record8(current);
-       state = InExponentIndicator;
+        record8(current);
+        state = InExponentIndicator;
       } else
-       setDone(Number);
+        setDone(Number);
       break;
     case InExponentIndicator:
       if (current == '+' || current == '-') {
-       record8(current);
+        record8(current);
       } else if (isDecimalDigit(current)) {
-       record8(current);
-       state = InExponent;
+        record8(current);
+        state = InExponent;
       } else
-       setDone(Bad);
+        setDone(Bad);
       break;
     case InExponent:
       if (isDecimalDigit(current)) {
-       record8(current);
+        record8(current);
       } else
-       setDone(Number);
+        setDone(Number);
       break;
     default:
       assert(!"Unhandled state in switch statement");
@@ -505,7 +507,7 @@ int Lexer::lex()
       eatNextIdentifier = true;
 
     if (token == CONTINUE || token == BREAK ||
-       token == RETURN || token == THROW)
+        token == RETURN || token == THROW)
       restrKeyword = true;
     break;
   case String:
@@ -530,7 +532,7 @@ int Lexer::lex()
 bool Lexer::isWhiteSpace() const
 {
   return (current == ' ' || current == '\t' ||
-         current == 0x0b || current == 0x0c);
+          current == 0x0b || current == 0x0c);
 }
 
 bool Lexer::isLineTerminator()
@@ -548,8 +550,8 @@ bool Lexer::isIdentLetter(unsigned short c)
 {
   /* TODO: allow other legitimate unicode chars */
   return (c >= 'a' && c <= 'z' ||
-         c >= 'A' && c <= 'Z' ||
-         c == '$' || c == '_');
+          c >= 'A' && c <= 'Z' ||
+          c == '$' || c == '_');
 }
 
 bool Lexer::isDecimalDigit(unsigned short c)
@@ -560,8 +562,8 @@ bool Lexer::isDecimalDigit(unsigned short c)
 bool Lexer::isHexDigit(unsigned short c) const
 {
   return (c >= '0' && c <= '9' ||
-         c >= 'a' && c <= 'f' ||
-         c >= 'A' && c <= 'F');
+          c >= 'a' && c <= 'f' ||
+          c >= 'A' && c <= 'F');
 }
 
 bool Lexer::isOctalDigit(unsigned short c) const
@@ -570,7 +572,7 @@ bool Lexer::isOctalDigit(unsigned short c) const
 }
 
 int Lexer::matchPunctuator(unsigned short c1, unsigned short c2,
-                             unsigned short c3, unsigned short c4)
+                              unsigned short c3, unsigned short c4)
 {
   if (c1 == '>' && c2 == '>' && c3 == '>' && c4 == '=') {
     shift(4);
@@ -735,7 +737,7 @@ UChar Lexer::convertUnicode(unsigned short c1, unsigned short c2,
                                      unsigned short c3, unsigned short c4)
 {
   return UChar((convertHex(c1) << 4) + convertHex(c2),
-              (convertHex(c3) << 4) + convertHex(c4));
+               (convertHex(c3) << 4) + convertHex(c4));
 }
 
 void Lexer::record8(unsigned short c)
index ad0f01a98687a4b03ea231a9e8c10c15ad368feb..db04cc6a98df8fc9c41efc25f8ec4b16d48f12cf 100644 (file)
@@ -18,7 +18,6 @@
  *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  *  Boston, MA 02111-1307, USA.
  *
- *  $Id$
  */
 
 #ifndef _KJSLEXER_H_
@@ -44,28 +43,28 @@ namespace KJS {
     bool prevTerminator() const { return terminator; }
 
     enum State { Start,
-                Identifier,
-                InIdentifier,
-                InSingleLineComment,
-                InMultiLineComment,
-                InNum,
-                InNum0,
-                InHex,
-                InOctal,
-                InDecimal,
-                InExponentIndicator,
-                InExponent,
-                Hex,
-                Octal,
-                Number,
-                String,
-                Eof,
-                InString,
-                InEscapeSequence,
-                InHexEscape,
-                InUnicodeEscape,
-                Other,
-                Bad };
+                 Identifier,
+                 InIdentifier,
+                 InSingleLineComment,
+                 InMultiLineComment,
+                 InNum,
+                 InNum0,
+                 InHex,
+                 InOctal,
+                 InDecimal,
+                 InExponentIndicator,
+                 InExponent,
+                 Hex,
+                 Octal,
+                 Number,
+                 String,
+                 Eof,
+                 InString,
+                 InEscapeSequence,
+                 InHexEscape,
+                 InUnicodeEscape,
+                 Other,
+                 Bad };
 
     bool scanRegExp();
     UString pattern, flags;
@@ -91,6 +90,7 @@ namespace KJS {
     void setDone(State s);
     unsigned int pos;
     void shift(unsigned int p);
+    void nextLine();
     int lookupKeyword(const char *);
 
     bool isWhiteSpace() const;
@@ -99,7 +99,7 @@ namespace KJS {
     bool isOctalDigit(unsigned short c) const;
 
     int matchPunctuator(unsigned short c1, unsigned short c2,
-                       unsigned short c3, unsigned short c4);
+                        unsigned short c3, unsigned short c4);
     unsigned short singleEscape(unsigned short c) const;
     unsigned short convertOctal(unsigned short c1, unsigned short c2,
                                 unsigned short c3) const;
@@ -107,7 +107,7 @@ namespace KJS {
     static unsigned char convertHex(unsigned short c1);
     static unsigned char convertHex(unsigned short c1, unsigned short c2);
     static UChar convertUnicode(unsigned short c1, unsigned short c2,
-                               unsigned short c3, unsigned short c4);
+                                unsigned short c3, unsigned short c4);
     static bool isIdentLetter(unsigned short c);
     static bool isDecimalDigit(unsigned short c);
 
index 774b221418cf9193f1a30b1c5c4182106d63ce19..49635434c207db3ddc807a369df088272f436aa8 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #include <stdio.h>
index 0c4da258105406a49d8cac7e35d98963f6c73938..f8ce1002057cf19ed66804e2f3e8bc6bd82638dc 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #ifndef _KJSLOOKUP_H_
@@ -33,16 +32,26 @@ namespace KJS {
    * An entry in a hash table.
    */
   struct HashEntry {
-    /** s is the key (e.g. a property name) */
+    /**
+     * s is the key (e.g. a property name)
+     */
     const char *s;
-    /** value is the result value (usually an enum value) */
+    /**
+     * value is the result value (usually an enum value)
+     */
     int value;
-    /** attr is a set for flags (e.g. the property flags, see object.h) */
+    /**
+     * attr is a set for flags (e.g. the property flags, see object.h)
+     */
     short int attr;
-    /** params is another number. For property hashtables, it is used to
-        denote the number of argument of the function */
+    /**
+     * params is another number. For property hashtables, it is used to
+     * denote the number of argument of the function
+     */
     short int params;
-    /** next is the pointer to the next entry for the same hash value */
+    /**
+     * next is the pointer to the next entry for the same hash value
+     */
     const HashEntry *next;
   };
 
@@ -58,16 +67,24 @@ namespace KJS {
    * and links overflow entries between them.
    */
   struct HashTable {
-    /** type is a version number. Currently always 2 */
+    /**
+     * type is a version number. Currently always 2
+     */
     int type;
-    /** size is the total number of entries in the hashtable, including the null entries,
+    /**
+     * size is the total number of entries in the hashtable, including the null entries,
      * i.e. the size of the "entries" array.
-     * Used to iterate over all entries in the table */
+     * Used to iterate over all entries in the table
+     */
     int size;
-    /** pointer to the array of entries
-     * Mind that some entries in the array are null (0,0,0,0). */
+    /**
+     * pointer to the array of entries
+     * Mind that some entries in the array are null (0,0,0,0).
+     */
     const HashEntry *entries;
-    /** the maximum value for the hash. Always smaller than size. */
+    /**
+     * the maximum value for the hash. Always smaller than size.
+     */
     int hashSize;
   };
 
@@ -76,7 +93,9 @@ namespace KJS {
    */
   class Lookup {
   public:
-    /** Find an entry in the table, and return its value (i.e. the value field of HashEntry) */
+    /**
+     * Find an entry in the table, and return its value (i.e. the value field of HashEntry)
+     */
     static int find(const struct HashTable *table, const UString &s);
     static int find(const struct HashTable *table,
                    const UChar *c, unsigned int len);
@@ -91,7 +110,9 @@ namespace KJS {
     static const HashEntry* findEntry(const struct HashTable *table,
                                       const UChar *c, unsigned int len);
 
-    /** Calculate the hash value for a given key */
+    /**
+     * Calculate the hash value for a given key
+     */
     static unsigned int hash(const UString &key);
     static unsigned int hash(const UChar *c, unsigned int len);
     static unsigned int hash(const char *s);
@@ -99,8 +120,10 @@ namespace KJS {
 
   class ExecState;
   class UString;
-  /** @internal
-   * Helper for lookupFunction and lookupValueOrFunction */
+  /**
+   * @internal
+   * Helper for lookupFunction and lookupValueOrFunction
+   */
   template <class FuncImp>
   inline Value lookupOrCreateFunction(ExecState *exec, const UString &propertyName,
                                       const ObjectImp *thisObj, int token, int params, int attr)
index 1111016309a5c4c2f9a6fb8cab6b00596a6e8f6a..b82f32ab7691cc079aedadc07b31ee407ebcc983 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #include <math.h>
 
 #include "math_object.lut.h"
 
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif  /*  M_PI  */
+
 using namespace KJS;
 
 // ------------------------------ MathObjectImp --------------------------------
@@ -42,32 +45,32 @@ const ClassInfo MathObjectImp::info = { "Math", 0, &mathTable, 0 };
 
 /* Source for math_object.lut.h
 @begin mathTable 21
-  E            MathObjectImp::Euler    DontEnum
-  LN2          MathObjectImp::Ln2      DontEnum
-  LN10         MathObjectImp::Ln10     DontEnum
-  LOG2E                MathObjectImp::Log2E    DontEnum
-  LOG10E       MathObjectImp::Log10E   DontEnum
-  PI           MathObjectImp::Pi       DontEnum
-  SQRT1_2      MathObjectImp::Sqrt1_2  DontEnum
-  SQRT2                MathObjectImp::Sqrt2    DontEnum
-  abs          MathObjectImp::Abs      DontEnum|Function 1
-  acos         MathObjectImp::ACos     DontEnum|Function 1
-  asin         MathObjectImp::ASin     DontEnum|Function 1
-  atan         MathObjectImp::ATan     DontEnum|Function 1
-  atan2                MathObjectImp::ATan2    DontEnum|Function 2
-  ceil         MathObjectImp::Ceil     DontEnum|Function 1
-  cos          MathObjectImp::Cos      DontEnum|Function 1
-  exp          MathObjectImp::Exp      DontEnum|Function 1
-  floor                MathObjectImp::Floor    DontEnum|Function 1
-  log          MathObjectImp::Log      DontEnum|Function 1
-  max          MathObjectImp::Max      DontEnum|Function 2
-  min          MathObjectImp::Min      DontEnum|Function 2
-  pow          MathObjectImp::Pow      DontEnum|Function 2
-  random       MathObjectImp::Random   DontEnum|Function 0
-  round                MathObjectImp::Round    DontEnum|Function 1
-  sin          MathObjectImp::Sin      DontEnum|Function 1
-  sqrt         MathObjectImp::Sqrt     DontEnum|Function 1
-  tan          MathObjectImp::Tan      DontEnum|Function 1
+  E             MathObjectImp::Euler    DontEnum|DontDelete|ReadOnly
+  LN2           MathObjectImp::Ln2      DontEnum|DontDelete|ReadOnly
+  LN10          MathObjectImp::Ln10     DontEnum|DontDelete|ReadOnly
+  LOG2E         MathObjectImp::Log2E    DontEnum|DontDelete|ReadOnly
+  LOG10E        MathObjectImp::Log10E   DontEnum|DontDelete|ReadOnly
+  PI            MathObjectImp::Pi       DontEnum|DontDelete|ReadOnly
+  SQRT1_2       MathObjectImp::Sqrt1_2  DontEnum|DontDelete|ReadOnly
+  SQRT2         MathObjectImp::Sqrt2    DontEnum|DontDelete|ReadOnly
+  abs           MathObjectImp::Abs      DontEnum|Function 1
+  acos          MathObjectImp::ACos     DontEnum|Function 1
+  asin          MathObjectImp::ASin     DontEnum|Function 1
+  atan          MathObjectImp::ATan     DontEnum|Function 1
+  atan2         MathObjectImp::ATan2    DontEnum|Function 2
+  ceil          MathObjectImp::Ceil     DontEnum|Function 1
+  cos           MathObjectImp::Cos      DontEnum|Function 1
+  exp           MathObjectImp::Exp      DontEnum|Function 1
+  floor         MathObjectImp::Floor    DontEnum|Function 1
+  log           MathObjectImp::Log      DontEnum|Function 1
+  max           MathObjectImp::Max      DontEnum|Function 2
+  min           MathObjectImp::Min      DontEnum|Function 2
+  pow           MathObjectImp::Pow      DontEnum|Function 2
+  random        MathObjectImp::Random   DontEnum|Function 0
+  round         MathObjectImp::Round    DontEnum|Function 1
+  sin           MathObjectImp::Sin      DontEnum|Function 1
+  sqrt          MathObjectImp::Sqrt     DontEnum|Function 1
+  tan           MathObjectImp::Tan      DontEnum|Function 1
 @end
 */
 
@@ -103,7 +106,7 @@ Value MathObjectImp::getValueProperty(ExecState *, int token) const
     d = 1.0/log(10.0);
     break;
   case Pi:
-    d = 2.0 * asin(1.0);
+    d = M_PI;
     break;
   case Sqrt1_2:
     d = sqrt(0.5);
index aa2d2362be0b72739361e518976bdff49cbe8fae..b0a4e2b8feef04c1d631725a90bc70ff64156c8c 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #ifndef _MATH_OBJECT_H_
index 01b80196bb99bafc44335e2584a5929afb690f71..81cbc4637a49e6b11d2883562baa074a0c604ac2 100644 (file)
@@ -7,27 +7,27 @@ namespace KJS {
 const struct HashEntry mathTableEntries[] = {
    { "atan", MathObjectImp::ATan, DontEnum|Function, 1, &mathTableEntries[25] },
    { 0, 0, 0, 0, 0 },
-   { "SQRT2", MathObjectImp::Sqrt2, DontEnum, 0, &mathTableEntries[23] },
+   { "SQRT2", MathObjectImp::Sqrt2, DontEnum|DontDelete|ReadOnly, 0, &mathTableEntries[23] },
    { 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0 },
-   { "E", MathObjectImp::Euler, DontEnum, 0, &mathTableEntries[21] },
+   { "E", MathObjectImp::Euler, DontEnum|DontDelete|ReadOnly, 0, &mathTableEntries[21] },
    { "asin", MathObjectImp::ASin, DontEnum|Function, 1, &mathTableEntries[26] },
    { "atan2", MathObjectImp::ATan2, DontEnum|Function, 2, &mathTableEntries[32] },
-   { "LOG2E", MathObjectImp::Log2E, DontEnum, 0, &mathTableEntries[27] },
+   { "LOG2E", MathObjectImp::Log2E, DontEnum|DontDelete|ReadOnly, 0, &mathTableEntries[27] },
    { "cos", MathObjectImp::Cos, DontEnum|Function, 1, 0 },
    { "max", MathObjectImp::Max, DontEnum|Function, 2, &mathTableEntries[29] },
    { 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0 },
-   { "LOG10E", MathObjectImp::Log10E, DontEnum, 0, &mathTableEntries[24] },
-   { "LN2", MathObjectImp::Ln2, DontEnum, 0, &mathTableEntries[31] },
+   { "LOG10E", MathObjectImp::Log10E, DontEnum|DontDelete|ReadOnly, 0, &mathTableEntries[24] },
+   { "LN2", MathObjectImp::Ln2, DontEnum|DontDelete|ReadOnly, 0, &mathTableEntries[31] },
    { "abs", MathObjectImp::Abs, DontEnum|Function, 1, 0 },
    { "sqrt", MathObjectImp::Sqrt, DontEnum|Function, 1, 0 },
    { "exp", MathObjectImp::Exp, DontEnum|Function, 1, 0 },
    { 0, 0, 0, 0, 0 },
-   { "LN10", MathObjectImp::Ln10, DontEnum, 0, &mathTableEntries[22] },
-   { "PI", MathObjectImp::Pi, DontEnum, 0, &mathTableEntries[28] },
-   { "SQRT1_2", MathObjectImp::Sqrt1_2, DontEnum, 0, 0 },
+   { "LN10", MathObjectImp::Ln10, DontEnum|DontDelete|ReadOnly, 0, &mathTableEntries[22] },
+   { "PI", MathObjectImp::Pi, DontEnum|DontDelete|ReadOnly, 0, &mathTableEntries[28] },
+   { "SQRT1_2", MathObjectImp::Sqrt1_2, DontEnum|DontDelete|ReadOnly, 0, 0 },
    { "acos", MathObjectImp::ACos, DontEnum|Function, 1, 0 },
    { "ceil", MathObjectImp::Ceil, DontEnum|Function, 1, 0 },
    { "floor", MathObjectImp::Floor, DontEnum|Function, 1, 0 },
index 4bca71ec98580f795defafaf32f59b6faf16f233..ace34aadfb0a98a8ec0cc27142ae94ffbf795885 100644 (file)
 
 #include "nodes.h"
 
-#include <assert.h>
-#ifdef APPLE_CHANGES
-#include <iostream>
-#else
-#include <iostream.h>
-#endif
+//#include <iostream>
 #include <math.h>
-#include <stdio.h>
+#include <assert.h>
 #ifdef KJS_DEBUG_MEM
+#include <stdio.h>
 #include <typeinfo>
 #endif
 
@@ -2541,7 +2537,6 @@ Completion CaseBlockNode::evalBlock(ExecState *exec, const Value& input)
   ClauseListNode *a = list1, *b = list2;
   CaseClauseNode *clause;
 
-  if (a) {
     while (a) {
       clause = a->clause();
       a = a->next();
@@ -2560,7 +2555,6 @@ Completion CaseBlockNode::evalBlock(ExecState *exec, const Value& input)
        break;
       }
     }
-  }
 
   while (b) {
     clause = b->clause();
@@ -2946,7 +2940,7 @@ Completion FunctionBodyNode::execute(ExecState *exec)
 {
   /* TODO: workaround for empty body which I don't see covered by the spec */
   if (!source)
-    return Completion(ReturnValue, Undefined());
+    return Completion(Normal);
 
   source->processFuncDecl(exec);
 
index 1ccac86de8dec4c546a25af34a392268b271d9f4..f010a3ba8dda6d77885cf1c68c0e1302cbc19b39 100644 (file)
@@ -19,7 +19,6 @@
  *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  *  Boston, MA 02111-1307, USA.
  *
- *  $Id$
  */
 
 #ifndef _NODES_H_
@@ -38,6 +37,7 @@ namespace KJS {
   class RegExp;
   class SourceElementsNode;
   class ProgramNode;
+  class SourceStream;
 
   enum Operator { OpEqual,
                  OpEqEq,
@@ -75,6 +75,8 @@ namespace KJS {
     Node();
     virtual ~Node();
     virtual Value evaluate(ExecState *exec) = 0;
+    UString toString() const;
+    virtual void streamTo(SourceStream &s) const = 0;
     virtual void processVarDecls(ExecState */*exec*/) {}
     int lineNo() const { return line; }
 
@@ -133,12 +135,14 @@ namespace KJS {
   public:
     NullNode() {}
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   };
 
   class BooleanNode : public Node {
   public:
     BooleanNode(bool v) : value(v) {}
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     bool value;
   };
@@ -147,6 +151,7 @@ namespace KJS {
   public:
     NumberNode(double v) : value(v) { }
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     double value;
   };
@@ -155,6 +160,7 @@ namespace KJS {
   public:
     StringNode(const UString *v) { value = *v; }
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     UString value;
   };
@@ -164,6 +170,7 @@ namespace KJS {
     RegExpNode(const UString &p, const UString &f)
       : pattern(p), flags(f) { }
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     UString pattern, flags;
   };
@@ -172,12 +179,14 @@ namespace KJS {
   public:
     ThisNode() {}
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   };
 
   class ResolveNode : public Node {
   public:
     ResolveNode(const UString *s) : ident(*s) { }
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     UString ident;
   };
@@ -189,6 +198,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~GroupNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const { group->streamTo(s); }
   private:
     Node *group;
   };
@@ -200,19 +210,21 @@ namespace KJS {
     virtual bool deref();
     virtual ~ElisionNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     ElisionNode *elision;
   };
 
   class ElementNode : public Node {
   public:
-    ElementNode(ElisionNode *e, Node *n) : list(0l), elision(e), node(n) { }
+    ElementNode(ElisionNode *e, Node *n) : list(0L), elision(e), node(n) { }
     ElementNode(ElementNode *l, ElisionNode *e, Node *n)
       : list(l), elision(e), node(n) { }
     virtual void ref();
     virtual bool deref();
     virtual ~ElementNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     ElementNode *list;
     ElisionNode *elision;
@@ -230,6 +242,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~ArrayNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     ElementNode *element;
     ElisionNode *elision;
@@ -243,6 +256,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~ObjectLiteralNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *list;
   };
@@ -255,6 +269,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~PropertyValueNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *name, *assign, *list;
   };
@@ -264,6 +279,7 @@ namespace KJS {
     PropertyNode(double d) : numeric(d) { }
     PropertyNode(const UString *s) : str(*s) { }
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     double numeric;
     UString str;
@@ -276,6 +292,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~AccessorNode1();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr1;
     Node *expr2;
@@ -288,6 +305,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~AccessorNode2();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
     UString ident;
@@ -302,6 +320,7 @@ namespace KJS {
     virtual ~ArgumentListNode();
     Value evaluate(ExecState *exec);
     List evaluateList(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     ArgumentListNode *list;
     Node *expr;
@@ -315,6 +334,7 @@ namespace KJS {
     virtual ~ArgumentsNode();
     Value evaluate(ExecState *exec);
     List evaluateList(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     ArgumentListNode *list;
   };
@@ -327,6 +347,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~NewExprNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
     ArgumentsNode *args;
@@ -339,6 +360,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~FunctionCallNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
     ArgumentsNode *args;
@@ -351,6 +373,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~PostfixNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
     Operator oper;
@@ -363,6 +386,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~DeleteNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
   };
@@ -374,6 +398,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~VoidNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
   };
@@ -385,6 +410,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~TypeOfNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
   };
@@ -396,6 +422,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~PrefixNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Operator oper;
     Node *expr;
@@ -408,6 +435,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~UnaryPlusNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
   };
@@ -419,6 +447,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~NegateNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
   };
@@ -430,6 +459,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~BitwiseNotNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
   };
@@ -441,6 +471,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~LogicalNotNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
   };
@@ -452,6 +483,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~MultNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *term1, *term2;
     char oper;
@@ -464,6 +496,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~AddNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *term1, *term2;
     char oper;
@@ -477,6 +510,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~ShiftNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *term1, *term2;
     Operator oper;
@@ -490,6 +524,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~RelationalNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr1, *expr2;
     Operator oper;
@@ -503,6 +538,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~EqualNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr1, *expr2;
     Operator oper;
@@ -516,12 +552,15 @@ namespace KJS {
     virtual bool deref();
     virtual ~BitOperNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr1, *expr2;
     Operator oper;
   };
 
-  /** expr1 && expr2, expr1 || expr2 */
+  /**
+   * expr1 && expr2, expr1 || expr2
+   */
   class BinaryLogicalNode : public Node {
   public:
     BinaryLogicalNode(Node *e1, Operator o, Node *e2) :
@@ -530,12 +569,15 @@ namespace KJS {
     virtual bool deref();
     virtual ~BinaryLogicalNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr1, *expr2;
     Operator oper;
   };
 
-  /** The ternary operator, "logical ? expr1 : expr2" */
+  /**
+   * The ternary operator, "logical ? expr1 : expr2"
+   */
   class ConditionalNode : public Node {
   public:
     ConditionalNode(Node *l, Node *e1, Node *e2) :
@@ -544,6 +586,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~ConditionalNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *logical, *expr1, *expr2;
   };
@@ -555,6 +598,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~AssignNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *left;
     Operator oper;
@@ -568,6 +612,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~CommaNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr1, *expr2;
   };
@@ -581,6 +626,7 @@ namespace KJS {
     virtual ~StatListNode();
     virtual Completion execute(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     StatementNode *statement;
     StatListNode *list;
@@ -593,6 +639,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~AssignExprNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
   };
@@ -605,6 +652,7 @@ namespace KJS {
     virtual ~VarDeclNode();
     Value evaluate(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     UString ident;
     AssignExprNode *init;
@@ -619,6 +667,7 @@ namespace KJS {
     virtual ~VarDeclListNode();
     Value evaluate(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *list;
     VarDeclNode *var;
@@ -632,6 +681,7 @@ namespace KJS {
     virtual ~VarStatementNode();
     virtual Completion execute(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     VarDeclListNode *list;
   };
@@ -644,6 +694,7 @@ namespace KJS {
     virtual ~BlockNode();
     virtual Completion execute(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     SourceElementsNode *source;
   };
@@ -652,6 +703,7 @@ namespace KJS {
   public:
     EmptyStatementNode() { } // debug
     virtual Completion execute(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   };
 
   class ExprStatementNode : public StatementNode {
@@ -661,6 +713,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~ExprStatementNode();
     virtual Completion execute(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
   };
@@ -674,6 +727,7 @@ namespace KJS {
     virtual ~IfNode();
     virtual Completion execute(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
     StatementNode *statement1, *statement2;
@@ -687,6 +741,7 @@ namespace KJS {
     virtual ~DoWhileNode();
     virtual Completion execute(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     StatementNode *statement;
     Node *expr;
@@ -700,6 +755,7 @@ namespace KJS {
     virtual ~WhileNode();
     virtual Completion execute(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
     StatementNode *statement;
@@ -714,6 +770,7 @@ namespace KJS {
     virtual ~ForNode();
     virtual Completion execute(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr1, *expr2, *expr3;
     StatementNode *statement;
@@ -728,6 +785,7 @@ namespace KJS {
     virtual ~ForInNode();
     virtual Completion execute(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     UString ident;
     AssignExprNode *init;
@@ -741,6 +799,7 @@ namespace KJS {
     ContinueNode() { }
     ContinueNode(const UString *i) : ident(*i) { }
     virtual Completion execute(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     UString ident;
   };
@@ -750,6 +809,7 @@ namespace KJS {
     BreakNode() { }
     BreakNode(const UString *i) : ident(*i) { }
     virtual Completion execute(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     UString ident;
   };
@@ -761,6 +821,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~ReturnNode();
     virtual Completion execute(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *value;
   };
@@ -773,6 +834,7 @@ namespace KJS {
     virtual ~WithNode();
     virtual Completion execute(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
     StatementNode *statement;
@@ -787,6 +849,7 @@ namespace KJS {
     Value evaluate(ExecState *exec);
     Completion evalStatements(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
     StatListNode *list;
@@ -803,6 +866,7 @@ namespace KJS {
     CaseClauseNode *clause() const { return cl; }
     ClauseListNode *next() const { return nx; }
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     CaseClauseNode *cl;
     ClauseListNode *nx;
@@ -818,6 +882,7 @@ namespace KJS {
     Value evaluate(ExecState *exec);
     Completion evalBlock(ExecState *exec, const Value& input);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     ClauseListNode *list1;
     CaseClauseNode *def;
@@ -832,6 +897,7 @@ namespace KJS {
     virtual ~SwitchNode();
     virtual Completion execute(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
     CaseBlockNode *block;
@@ -845,6 +911,7 @@ namespace KJS {
     virtual ~LabelNode();
     virtual Completion execute(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     UString label;
     StatementNode *statement;
@@ -857,6 +924,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~ThrowNode();
     virtual Completion execute(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
   };
@@ -870,6 +938,7 @@ namespace KJS {
     virtual Completion execute(ExecState *exec);
     Completion execute(ExecState *exec, const Value &arg);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     UString ident;
     StatementNode *block;
@@ -883,6 +952,7 @@ namespace KJS {
     virtual ~FinallyNode();
     virtual Completion execute(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     StatementNode *block;
   };
@@ -896,6 +966,7 @@ namespace KJS {
     virtual ~TryNode();
     virtual Completion execute(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     StatementNode *block;
     CatchNode *_catch;
@@ -912,6 +983,7 @@ namespace KJS {
     Value evaluate(ExecState *exec);
     UString ident() { return id; }
     ParameterNode *nextParam() { return next; }
+    virtual void streamTo(SourceStream &s) const;
   private:
     UString id;
     ParameterNode *next;
@@ -927,6 +999,7 @@ namespace KJS {
     Completion execute(ExecState *exec);
     virtual void processFuncDecl(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    void streamTo(SourceStream &s) const;
   protected:
     SourceElementsNode *source;
   };
@@ -941,6 +1014,7 @@ namespace KJS {
     Completion execute(ExecState */*exec*/)
       { /* empty */ return Completion(); }
     void processFuncDecl(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     UString ident;
     ParameterNode *param;
@@ -955,6 +1029,7 @@ namespace KJS {
     virtual bool deref();
     virtual ~FuncExprNode();
     Value evaluate(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     ParameterNode *param;
     FunctionBodyNode *body;
@@ -962,14 +1037,15 @@ namespace KJS {
 
   class SourceElementNode : public StatementNode {
   public:
-    SourceElementNode(StatementNode *s) { statement = s; function = 0L; }
-    SourceElementNode(FuncDeclNode *f) { function = f; statement = 0L;}
+    SourceElementNode(StatementNode *s) : statement(s), function(0L) { }
+    SourceElementNode(FuncDeclNode *f) : statement(0L), function(f) { }
     virtual void ref();
     virtual bool deref();
     virtual ~SourceElementNode();
     Completion execute(ExecState *exec);
     virtual void processFuncDecl(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     StatementNode *statement;
     FuncDeclNode *function;
@@ -987,6 +1063,7 @@ namespace KJS {
     Completion execute(ExecState *exec);
     virtual void processFuncDecl(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
+    virtual void streamTo(SourceStream &s) const;
   private:
     SourceElementNode *element; // 'this' element
     SourceElementsNode *elements; // pointer to next
index b041b14ca47033322f2df468cedf93d9ef603787..de2abe85063d9cddd2fe01ad1a7448e99890d8c2 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #include "value.h"
index b094541e5704dd03cf76cb9d2e26b3136342faf8..b6df98609f324227171342885896800e4162e3bb 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #ifndef _NUMBER_OBJECT_H_
index f98c3e9e98f8e646dac59eb117463b8ce7bc48e2..3b24acb1bae933ccb5606673e5a6e912e3a35808 100644 (file)
@@ -19,7 +19,6 @@
  *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  *  Boston, MA 02111-1307, USA.
  *
- *  $Id$
  */
 
 #include "value.h"
@@ -108,9 +107,9 @@ bool Object::canPut(ExecState *exec, const UString &propertyName) const
   return static_cast<ObjectImp*>(rep)->canPut(exec,propertyName);
 }
 
-bool Object::hasProperty(ExecState *exec, const UString &propertyName, bool recursive) const
+bool Object::hasProperty(ExecState *exec, const UString &propertyName) const
 {
-  return static_cast<ObjectImp*>(rep)->hasProperty(exec,propertyName,recursive);
+  return static_cast<ObjectImp*>(rep)->hasProperty(exec, propertyName);
 }
 
 bool Object::deleteProperty(ExecState *exec, const UString &propertyName)
@@ -183,14 +182,14 @@ void Object::setInternalValue(const Value &v)
 ObjectImp::ObjectImp(const Object &proto)
   : _prop(0), _proto(static_cast<ObjectImp*>(proto.imp())), _internalValue(0L), _scope(0)
 {
-  //fprintf(stderr,"ObjectImp::ObjectImp %p %s\n",(void*)this);
+  //fprintf(stderr,"ObjectImp::ObjectImp %p\n",(void*)this);
   _scope = ListImp::empty();
   _prop = new PropertyMap();
 }
 
 ObjectImp::ObjectImp()
 {
-  //fprintf(stderr,"ObjectImp::ObjectImp %p %s\n",(void*)this);
+  //fprintf(stderr,"ObjectImp::ObjectImp %p\n",(void*)this);
   _prop = 0;
   _proto = NullImp::staticNull;
   _internalValue = 0L;
@@ -356,7 +355,7 @@ bool ObjectImp::canPut(ExecState *, const UString &propertyName) const
 }
 
 // ECMA 8.6.2.4
-bool ObjectImp::hasProperty(ExecState *exec, const UString &propertyName, bool recursive) const
+bool ObjectImp::hasProperty(ExecState *exec, const UString &propertyName) const
 {
   if (propertyName == "__proto__")
     return true;
@@ -369,10 +368,7 @@ bool ObjectImp::hasProperty(ExecState *exec, const UString &propertyName, bool r
 
   // Look in the prototype
   Object proto = Object::dynamicCast(prototype());
-  if (proto.isNull() || !recursive)
-    return false;
-
-  return proto.hasProperty(exec,propertyName);
+  return !proto.isNull() && proto.hasProperty(exec,propertyName);
 }
 
 // ECMA 8.6.2.5
@@ -387,8 +383,9 @@ bool ObjectImp::deleteProperty(ExecState */*exec*/, const UString &propertyName)
   }
 
   // Look in the static hashtable of properties
-  if (findPropertyHashEntry(propertyName))
-    return false; // No builtin property can be deleted
+  const HashEntry* entry = findPropertyHashEntry(propertyName);
+  if (entry && entry->attr & DontDelete)
+    return false; // this builtin property can't be deleted
   return true;
 }
 
index e96df7c590a12c748f236f043b5750aad0a77322..de4ea03b4b23d0c21e6a5c4064350585f54e20f6 100644 (file)
@@ -41,11 +41,11 @@ namespace KJS {
   // ECMA 262-3 8.6.1
   // Attributes (only applicable to the Object type)
   enum Attribute { None       = 0,
-                  ReadOnly   = 1 << 1, // property can be only read, not written
-                  DontEnum   = 1 << 2, // property doesn't appear in (for .. in ..)
-                  DontDelete = 1 << 3, // property can't be deleted
-                  Internal   = 1 << 4, // an internal property, set to by pass checks
-                  Function   = 1 << 5 }; // property is a function - only used by static hashtables
+                   ReadOnly   = 1 << 1, // property can be only read, not written
+                   DontEnum   = 1 << 2, // property doesn't appear in (for .. in ..)
+                   DontDelete = 1 << 3, // property can't be deleted
+                   Internal   = 1 << 4, // an internal property, set to by pass checks
+                   Function   = 1 << 5 }; // property is a function - only used by static hashtables
 
   /**
    * Class Information
@@ -163,8 +163,7 @@ namespace KJS {
      * @param propertyName The name of the property to check for
      * @return true if the object has the property, otherwise false
      */
-    bool hasProperty(ExecState *exec, const UString &propertyName,
-                     bool recursive = true) const;
+    bool hasProperty(ExecState *exec, const UString &propertyName) const;
 
     /**
      * Removes the specified property from the object.
@@ -487,8 +486,8 @@ namespace KJS {
      *
      * @see Object::hasProperty()
      */
-    virtual bool hasProperty(ExecState *exec, const UString &propertyName,
-                             bool recursive = true) const;
+    virtual bool hasProperty(ExecState *exec,
+                            const UString &propertyName) const;
 
     /**
      * Implementation of the [[Delete]] internal property (implemented by all
@@ -578,12 +577,12 @@ namespace KJS {
    * should be used.
    */
   enum ErrorType { GeneralError   = 0,
-                  EvalError      = 1,
-                  RangeError     = 2,
-                  ReferenceError = 3,
-                  SyntaxError    = 4,
-                  TypeError      = 5,
-                  URIError       = 6};
+                   EvalError      = 1,
+                   RangeError     = 2,
+                   ReferenceError = 3,
+                   SyntaxError    = 4,
+                   TypeError      = 5,
+                   URIError       = 6};
 
   /**
    * @short Factory methods for error objects.
index 9d19cb38888c6e148377dd439cc7db811e4e7348..5326ba9b2dfc9d8f68c07820e7b42e0117db323b 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #include "value.h"
index 3e8938e07d5b84f5c59a26c91bda953903843f12..f2c7161bff4e484b89840383faa7e87cd39aef44 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #ifndef _OBJECT_OBJECT_H_
index da2d1b54f54f1368abbc37d12b1bd5c31ddd9da1..3b5a56ccf8487e4d2a6706e8eeaa0f0db8fec1db 100644 (file)
@@ -18,7 +18,6 @@
  *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  *  Boston, MA 02111-1307, USA.
  *
- *  $Id$
  */
 
 #ifndef _KJS_OPERATIONS_H_
index 0e7b40518e796aa515e4e5bd2afd3b2dba298c90..b195d5c22dc810a28bf44ceeb2f5bdc031575436 100644 (file)
  *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  *  Boston, MA 02111-1307, USA.
  *
- *  $Id$
  */
 
 
 #include "property_map.h"
 
-#include <config.h>
-
 #include <string.h>
 #include <assert.h>
 #include <stdio.h>
@@ -128,9 +125,7 @@ PropertyMap::PropertyMap()
 
 PropertyMap::~PropertyMap()
 {
-#ifdef APPLE_CHANGES
   clear();
-#endif
 }
 
 void PropertyMap::put(const UString &name, ValueImp *value, int attr)
index 32a4a5bfe06e7bf5d64e57116a4b4cc24a430ff6..ecf55bf702bcae15a008a074b363fbdc8bd3126c 100644 (file)
@@ -18,7 +18,6 @@
  *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  *  Boston, MA 02111-1307, USA.
  *
- *  $Id$
  */
 
 
index 123610d1b09363c59a5bea8a5954bda34b881155..88b82335dc23ebfa3aec41fa30b88b3b8a37f2a2 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #include <stdio.h>
index 8a66755a6fd2dcfa996ea9c5e90343fd74551f7b..b525004a547b08105094cfd36b38cf5a17c72b7a 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #ifndef _KJS_REGEXP_H_
index 7da0f006c25c33dad4303b4a60783379aebbf35c..2ea69b75f811e2cf368ffbf70e35b6439fbe0824 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #include <stdio.h>
index 2528cea2d796b4aee09d431538627685bdaf14ca..fc31ef8a54e40f09c9cba5d8e285c8452a5a3191 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #ifndef _REGEXP_OBJECT_H_
index 5f47f0f2bc3d7ea63069a84b4efa47fbdac0bb77..c7c9cf1510417da9edb2c756e0369ea3372b4a6d 100644 (file)
@@ -202,17 +202,13 @@ Value StringProtoFuncImp::call(ExecState *exec, Object &thisObj, const List &arg
       RegExpImp* imp = static_cast<RegExpImp *>( a0.toObject(exec).imp() );
       reg = imp->regExp();
     }
-    else if (a0.isA(StringType))
-    {
-      reg = new RegExp(a0.toString(exec), RegExp::None);
-    }
     else
-    {
-#ifndef NDEBUG
-      printf("KJS: Match/Search. Argument is not a RegExp nor a String - returning Undefined\n");
-#endif
-      result = Undefined();
-      break;
+    { /*
+       *  ECMA 15.5.4.12 String.prototype.search (regexp)
+       *  If regexp is not an object whose [[Class]] property is "RegExp", it is
+       *  replaced with the result of the expression new RegExp(regexp).
+       */
+      reg = new RegExp(a0.toString(exec), RegExp::None);
     }
     RegExpObjectImp* regExpObj = static_cast<RegExpObjectImp*>(exec->interpreter()->builtinRegExp().imp());
     int **ovector = regExpObj->registerRegexp( reg, u );
@@ -240,16 +236,34 @@ Value StringProtoFuncImp::call(ExecState *exec, Object &thisObj, const List &arg
         global = true;
 
       RegExpObjectImp* regExpObj = static_cast<RegExpObjectImp*>(exec->interpreter()->builtinRegExp().imp());
-      int **ovector = regExpObj->registerRegexp( reg, u );
       int lastIndex = 0;
       u3 = a1.toString(exec); // replacement string
       // This is either a loop (if global is set) or a one-way (if not).
       do {
+        int **ovector = regExpObj->registerRegexp( reg, u );
         UString mstr = reg->match(u, lastIndex, &pos, ovector);
         len = mstr.size();
-        lastIndex = pos + u3.size();
+        UString rstr(u3);
+        bool ok;
+        // check if u3 matches $1 or $2 etc
+        for (int i = 0; (i = rstr.find(UString("$"), i)) != -1; i++) {
+          if (i+1<rstr.size() && rstr[i+1] == '$') {  // "$$" -> "$"
+            rstr = rstr.substr(0,i) + "$" + rstr.substr(i+2);
+            continue;
+          }
+          // Assume number part is one char exactly
+          unsigned long pos = rstr.substr(i+1,1).toULong(&ok);
+          if (ok && pos <= (unsigned)reg->subPatterns()) {
+            rstr = rstr.substr(0,i)
+                      + u.substr((*ovector)[2*pos],
+                                     (*ovector)[2*pos+1]-(*ovector)[2*pos])
+                      + rstr.substr(i+2);
+            i += (*ovector)[2*pos+1]-(*ovector)[2*pos] - 1; // -1 offsets i++
+          }
+        }
+        lastIndex = pos + rstr.size();
         if ( pos != -1 )
-          u = u.substr(0, pos) + u3 + u.substr(pos + len);
+          u = u.substr(0, pos) + rstr + u.substr(pos + len);
         //fprintf(stderr,"pos=%d,len=%d,lastIndex=%d,u=%s\n",pos,len,lastIndex,u.ascii());
       } while ( global && pos != -1 );
 
@@ -320,7 +334,7 @@ Value StringProtoFuncImp::call(ExecState *exec, Object &thisObj, const List &arg
          i++;
        }
       }
-      delete ovector;
+      delete [] ovector;
     } else if (a0.type() != UndefinedType) {
       u2 = a0.toString(exec);
       if (u2.isEmpty()) {
index 1e60dd530388c1967e58c794f5d4c64a0ac830d7..b4a879184ee9b14c444440d131047b8418f227ce 100644 (file)
@@ -17,7 +17,6 @@
  *  License along with this library; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  $Id$
  */
 
 #ifndef _STRING_OBJECT_H_
index b9434e9b71a623bd40bcc87f5f22336abb424c51..e1179ecd4e9acd65ef814f2fa6e48a0e748c21cc 100644 (file)
@@ -18,7 +18,6 @@
  *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  *  Boston, MA 02111-1307, USA.
  *
- *  $Id$
  */
 
 #include <stdio.h>
@@ -63,13 +62,11 @@ int main(int argc, char **argv)
 
     // create interpreter
     Interpreter interp(global);
+    // add debug() function
     global.put(interp.globalExec(),"debug", Object(new TestFunctionImp()));
     // add "print" for compatibility with the mozilla js shell
     global.put(interp.globalExec(),"print", Object(new TestFunctionImp()));
 
-    // add debug() function
-    //  kjs->enableDebug();
-
     const int BufferSize = 200000;
     char code[BufferSize];
 
@@ -78,7 +75,7 @@ int main(int argc, char **argv)
       FILE *f = fopen(file, "r");
       if (!f) {
         fprintf(stderr, "Error opening %s.\n", file);
-        return -1;
+        return 2;
       }
       int num = fread(code, 1, BufferSize, f);
       code[num] = '\0';
@@ -112,7 +109,6 @@ int main(int argc, char **argv)
       }
     }
 
-    //  delete kjs;
   } // end block, so that Interpreter and global get deleted
 
   if (ret)
@@ -121,5 +117,5 @@ int main(int argc, char **argv)
 #ifdef KJS_DEBUG_MEM
   Interpreter::finalCheck();
 #endif
-  return ret;
+  return ret ? 0 : 1;
 }
index 9a9ec79d7c1d88ea99e76164cb80c513850aa090..23569fcb782d3e8d61300c1baa0a8310ff06b0af 100644 (file)
@@ -19,7 +19,6 @@
  *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  *  Boston, MA 02111-1307, USA.
  *
- *  $Id$
  */
 
 #include "value.h"
index 3cf650594576d1981c750dc220b4579c05e56657..857c7d7f2ff4c1f306d20d1dc7449cec450975e6 100644 (file)
@@ -19,7 +19,6 @@
  *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  *  Boston, MA 02111-1307, USA.
  *
- *  $Id$
  */
 
 #ifndef _KJS_TYPES_H_
index ef294cc910b76cb5ff626abdccd18e2e18889ffb..9c5ca51221f99cd7a8993f665c9774f75283e856 100644 (file)
@@ -18,7 +18,6 @@
  *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  *  Boston, MA 02111-1307, USA.
  *
- *  $Id$
  */
 
 #ifdef HAVE_CONFIG_H
@@ -181,7 +180,9 @@ UString::UString()
 
 UString::UString(char c)
 {
-  rep = Rep::create(new UChar(0, c), 1);
+    UChar *d = new UChar[1];
+    d[0] = UChar(0, c);
+    rep = Rep::create(d, 1);
 }
 
 UString::UString(const char *c)
@@ -523,21 +524,21 @@ bool KJS::operator==(const UString& s1, const char *s2)
 
 bool KJS::operator<(const UString& s1, const UString& s2)
 {
-  int l1 = s1.size();
-  int l2 = s2.size();
+  const int l1 = s1.size();
+  const int l2 = s2.size();
+  const int lmin = l1 < l2 ? l1 : l2;
   const UChar *c1 = s1.data();
   const UChar *c2 = s2.data();
   int l = 0;
-  int le = l1 < l2 ? l1 : l2;
-  while (l < le && *c1 == *c2) {
+  while (l < lmin && *c1 == *c2) {
     c1++;
     c2++;
     l++;
   }
-  if (l != le)
+  if (l < lmin)
     return (c1->unicode() < c2->unicode());
 
-  return (l1 < l2 && !(*c1 == *c2));
+  return (l1 < l2);
 }
 
 UString KJS::operator+(const UString& s1, const UString& s2)
index 03c87a3abf8d3b0cdd952ed376b95540e991da90..2658cb6dbd073a64f3ba18c4863fce2df27b6640 100644 (file)
  *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  *  Boston, MA 02111-1307, USA.
  *
- *  $Id$
  */
 
 #ifndef _KJS_USTRING_H_
 #define _KJS_USTRING_H_
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 #ifdef APPLE_CHANGES
 #ifndef KWQ_UNSIGNED_TYPES_DEFINED
 #define KWQ_UNSIGNED_TYPES_DEFINED
@@ -109,7 +104,7 @@ namespace KJS {
     friend bool operator==(const UString& s1, const char *s2);
     friend bool operator<(const UString& s1, const UString& s2);
 
-    ushort uc;
+    unsigned short uc;
   };
 
   inline UChar::UChar() : uc(0) { }
index f14ec3f790d6cb2ffa1a6f13319999c2ba8b9ec7..ec482121ee834bc115e69cbcac54676052295465 100644 (file)
@@ -41,10 +41,11 @@ using namespace KJS;
 
 // ------------------------------ ValueImp -------------------------------------
 
-ValueImp::ValueImp() : refcount(0), _flags(0)
-{
+ValueImp::ValueImp() :
+  refcount(0),
   // Tell the garbage collector that this memory block corresponds to a real object now
-  _flags |= VI_CREATED;
+  _flags(VI_CREATED)
+{
   //fprintf(stderr,"ValueImp::ValueImp %p\n",(void*)this);
 }
 
@@ -66,6 +67,7 @@ bool ValueImp::marked() const
 
 void ValueImp::setGcAllowed()
 {
+  //fprintf(stderr,"ValueImp::setGcAllowed %p\n",(void*)this);
   _flags |= VI_GCALLOWED;
 }
 
index 0fb9df043cdafa77367aa584d8d1e196de87a410..b6d76c055d21aeacacd51db36c6f1bbe64714faa 100644 (file)
 
 #endif
 
-#include "ustring.h"
+#include <stdlib.h> // Needed for size_t
 
-#if APPLE_CHANGES
-#include <stdlib.h>
-#endif
+#include "ustring.h"
 
 // Primitive data types
 
@@ -218,7 +216,7 @@ namespace KJS {
     /**
      * Performs the ToUint32 type conversion operation on this value (ECMA 9.6)
      */
-    uint toUInt32(ExecState *exec) const;
+    unsigned int toUInt32(ExecState *exec) const;
 
     /**
      * Performs the ToUint16 type conversion operation on this value (ECMA 9.7)
index 3c25ecc3b4b45fe3a49f20c07450106ae523cc90..d91446fb1522bd2b480d95b21753257711cfa892 100644 (file)
@@ -1,3 +1,161 @@
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       * src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration):
+       Remove some minor gratuitous diffs vs. KDE.
+
+2002-04-15  Richard Williamson  <rjw@apple.com>
+
+        Updated to reflect changes in KDE.
+        
+       * src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration):
+
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       * src/kdelibs/khtml/css/css_valueimpl.cpp:
+       (FontFamilyValueImpl::FontFamilyValueImpl): Fix comment.
+       * src/kdelibs/khtml/css/cssstyleselector.cpp: Remove some gratuitous diffs vs. KDE.
+       * src/kdelibs/khtml/html/html_objectimpl.cpp:
+       (HTMLEmbedElementImpl::parseAttribute): Remove unneeded copy from KWQ's early days.
+       * src/kdelibs/khtml/html/html_tableimpl.cpp:
+       (HTMLTableElementImpl::parseAttribute),
+       (HTMLTablePartElementImpl::parseAttribute): Remove unneeded copy from KWQ's early days.
+       * src/kdelibs/khtml/html/htmltokenizer.cpp: (HTMLTokenizer::processToken): Redo the
+       APPLE_CHANGES ifdef here.
+       * src/kdelibs/khtml/khtmlpart_p.h: Update to latest kde.
+       * src/kdelibs/khtml/khtmlview.cpp: (KHTMLView::KHTMLView): Add ifdef APPLE_CHANGES.
+       (KHTMLView::~KHTMLView): Add ifdef APPLE_CHANGES.
+       (KHTMLView::print): Remove code left in here during merge process.
+       * src/kwq/KWQKHTMLPart.mm: Remove unused setFontSizes(), fontSizes(), and
+       resetFontSizes(). After the merge is landed, remove more.
+       * src/libwebcore.exp: Export updateStyleSelector() for WebKit.
+
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       Fix text to it displays at the right font size.
+
+       * src/kdelibs/khtml/css/cssstyleselector.cpp:
+       (CSSStyleSelector::computeFontSizes): Apply the same SCREEN_RESOLUTION hack here
+       that we do elsewhere.
+       * src/kdelibs/khtml/rendering/font.cpp: (Font::width): Use kMin instead of max (oops).
+       (Font::update): Turn off font database chicanery.
+       * src/kwq/KWQKHTMLPart.mm: (KHTMLPart::zoomFactor): Use zoom factor 100, not 1.
+
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       More fixes so text displays (still at wrong font size).
+
+       * src/kdelibs/khtml/rendering/font.cpp: (max): New helper.
+       (Font::drawText): Simplified implementation for now.
+       (Font::width): Simplified implementation for now.
+       * src/kwq/KWQColorGroup.mm: Reinstated QCOLOR_GROUP_SIZE.
+
+       * src/kwq/qt/qfontmetrics.h: Removed charWidth and changed _width to take QChar *.
+       * src/kwq/KWQFontMetrics.mm: Removed charWidth and changed _width to take QChar *.
+
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       Merged changes from KDE 3.0 final. Other fixes to get things compiling.
+
+       * src/kdelibs/khtml/css/css_valueimpl.cpp:
+       (CSSStyleDeclarationImpl::setProperty): Fix unused variable.
+       * src/kdelibs/khtml/khtmlview.cpp: (KHTMLView::contentsContextMenuEvent):
+       Fix unused variable.
+       * src/kdelibs/khtml/rendering/font.cpp: (Font::drawText), (Font::width),
+       (Font::update): Disable special "nsbp" logic for now. We can reenable it
+       if necessary.
+       * src/kdelibs/khtml/rendering/render_replaced.cpp: Fix mismerge.
+       * src/kdelibs/khtml/rendering/render_text.cpp: (RenderText::nodeAtPoint):
+       Fix unused variable.
+       * src/kwq/KWQApplication.mm: (QDesktopWidget::width), (QApplication::desktop):
+       Fix mismerge.
+       * src/kwq/KWQColorGroup.mm: Fix QCOLOR_GROUP_SIZE.
+       * src/kwq/KWQFontMetrics.mm: (QFontMetrics::lineSpacing): New.
+       (QFontMetrics::width): Remove unused optimization.
+       * src/kwq/qt/qfontmetrics.h: Add lineSpacing().
+
+2002-04-15  Darin Adler  <darin@apple.com>
+
+        Merged changes from previous merge pass.
+
+        2002-03-25  Darin Adler  <darin@apple.com>
+
+        Last bit of making stuff compile and link. Probably will drop the merge now
+        and take it up again when it's time to merge in KDE 3.0 final.
+
+       * src/kwq/KWQEvent.mm: (QFocusEvent::reason): New.
+       * src/kwq/KWQPainter.mm: (QPainter::drawText): New overload.
+
+        2002-03-25  Darin Adler  <darin@apple.com>
+
+       * src/kdelibs/khtml/rendering/font.cpp: (Font::width): Make it call _width so we
+        don't lose the optimization.
+        
+       * src/kwq/KWQApplication.mm: (QDesktopWidget::screenNumber): New.
+       (QDesktopWidget::screenGeometry): New.
+        (QApplication::style): New.
+       * src/kwq/KWQColorGroup.mm: (QColorGroup::highlight): New.
+       (QColorGroup::highlightedText): New.
+       * src/kwq/KWQFont.mm: (QFont::setPixelSize): New.
+       * src/kwq/KWQFontMetrics.mm: (QFontMetrics::charWidth): New.
+       * src/kwq/KWQKGlobal.mm: (KGlobal::locale): Implement.
+        (KLocale::KLocale): New.
+       (KLocale::languageList): New.
+       * src/kwq/KWQKHTMLPart.mm: (KHTMLPart::sheetUsed): New.
+       (KHTMLPart::setSheetUsed): New.
+        (KHTMLPart::zoomFactor): New.
+       * src/kwq/KWQKHTMLSettings.mm: (KHTMLSettings::mediumFontSize): New.
+       * src/kwq/KWQScrollView.mm: (QScrollView::childX): New.
+        (QScrollView::childY): New.
+        
+       * src/kwq/qt/qapplication.h: style() returns a QStyle &.
+       * src/kwq/qt/qpalette.h: Add Highlight and HighlightedText.
+
+        2002-03-24  Darin Adler  <darin@apple.com>
+
+        More compiling. Still won't link.
+
+       * src/kdelibs/khtml/khtmlview.cpp: Disable printing and drag and drop code.
+       * src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration):
+        Temporarily turn off our smarter underlining since it relies on access to the
+        string, and TextSlave doesn't have that any more.
+       (RenderText::nodeAtPoint): Get rid of a workaround we don't need any more for
+        a bug that was fixed by KDE folks.
+       * src/kwq/KWQApplication.mm: (QApplication::desktop): Make the desktop be a
+        QDesktopWidget.
+       * src/kwq/qt/qnamespace.h: Add MetaButton.
+       * src/kwq/qt/qtooltip.h: Add a maybeTip virtual function member and a virtual
+        destructor.
+
+        2002-03-24  Darin Adler  <darin@apple.com>
+
+        Some fixes to get more stuff to compile.
+
+       * src/kdelibs/khtml/ecma/kjs_dom.cpp: (DOMDocument::getValueProperty):
+        Don't try to look at the private m_bComplete to display "complete". Just do
+        "loading" and "loaded".
+        * src/kdelibs/khtml/khtmlpart_p.h: #ifdef this all out for APPLE_CHANGES.
+       * src/kdelibs/khtml/rendering/font.cpp: (Font::update): Add an explicit cast to
+        int to avoid float -> int warning.
+       * src/kdelibs/khtml/rendering/render_table.cpp: (RenderTable::calcColMinMax):
+        Add an explicit cast to int to avoid uint compared with int warning.
+       * src/kdelibs/khtml/xml/dom_docimpl.cpp: (DocumentImpl::recalcStyleSelector):
+        Use sheetUsed() and setSheetUsed() functions on KHTMLPart intead of getting
+        at private fields the way the real KDE code does.
+        
+        * src/kwq/KWQKHTMLPart.h: Declare zoomFactor(), sheetUsed(), and setSheetUsed().
+       * src/kwq/KWQStyle.h: Add PM_DefaultFramWidth as another metric.
+       * src/kwq/kdecore/klocale.h: Add languageList().
+       * src/kwq/khtml/khtml_settings.h: Add mediumFontSize().
+       * src/kwq/qt/qapplication.h: Add style() and QDesktopWidget.
+       * src/kwq/qt/qevent.h: Add reason().
+       * src/kwq/qt/qfont.h: Add setPixelSize(int).
+       * src/kwq/qt/qfontmetrics.h: Add charWidth() and _charWidth() functions.
+       * src/kwq/qt/qpainter.h: Add drawText() overload with position parameter.
+       * src/kwq/qt/qpalette.h: Add highlight() and highlightedText().
+       * src/kwq/qt/qscrollview.h: Add childX() and childY().
+        
+       * src/kwq/KWQApplication.mm: Change KWQDesktopWidget to QDesktopWidget.
+
 2002-04-11  Chris Blumenberg  <set EMAIL_ADDRESS environment variable>
 
         Added a symbol for WCPluginDatabase.
index 3c25ecc3b4b45fe3a49f20c07450106ae523cc90..d91446fb1522bd2b480d95b21753257711cfa892 100644 (file)
@@ -1,3 +1,161 @@
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       * src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration):
+       Remove some minor gratuitous diffs vs. KDE.
+
+2002-04-15  Richard Williamson  <rjw@apple.com>
+
+        Updated to reflect changes in KDE.
+        
+       * src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration):
+
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       * src/kdelibs/khtml/css/css_valueimpl.cpp:
+       (FontFamilyValueImpl::FontFamilyValueImpl): Fix comment.
+       * src/kdelibs/khtml/css/cssstyleselector.cpp: Remove some gratuitous diffs vs. KDE.
+       * src/kdelibs/khtml/html/html_objectimpl.cpp:
+       (HTMLEmbedElementImpl::parseAttribute): Remove unneeded copy from KWQ's early days.
+       * src/kdelibs/khtml/html/html_tableimpl.cpp:
+       (HTMLTableElementImpl::parseAttribute),
+       (HTMLTablePartElementImpl::parseAttribute): Remove unneeded copy from KWQ's early days.
+       * src/kdelibs/khtml/html/htmltokenizer.cpp: (HTMLTokenizer::processToken): Redo the
+       APPLE_CHANGES ifdef here.
+       * src/kdelibs/khtml/khtmlpart_p.h: Update to latest kde.
+       * src/kdelibs/khtml/khtmlview.cpp: (KHTMLView::KHTMLView): Add ifdef APPLE_CHANGES.
+       (KHTMLView::~KHTMLView): Add ifdef APPLE_CHANGES.
+       (KHTMLView::print): Remove code left in here during merge process.
+       * src/kwq/KWQKHTMLPart.mm: Remove unused setFontSizes(), fontSizes(), and
+       resetFontSizes(). After the merge is landed, remove more.
+       * src/libwebcore.exp: Export updateStyleSelector() for WebKit.
+
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       Fix text to it displays at the right font size.
+
+       * src/kdelibs/khtml/css/cssstyleselector.cpp:
+       (CSSStyleSelector::computeFontSizes): Apply the same SCREEN_RESOLUTION hack here
+       that we do elsewhere.
+       * src/kdelibs/khtml/rendering/font.cpp: (Font::width): Use kMin instead of max (oops).
+       (Font::update): Turn off font database chicanery.
+       * src/kwq/KWQKHTMLPart.mm: (KHTMLPart::zoomFactor): Use zoom factor 100, not 1.
+
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       More fixes so text displays (still at wrong font size).
+
+       * src/kdelibs/khtml/rendering/font.cpp: (max): New helper.
+       (Font::drawText): Simplified implementation for now.
+       (Font::width): Simplified implementation for now.
+       * src/kwq/KWQColorGroup.mm: Reinstated QCOLOR_GROUP_SIZE.
+
+       * src/kwq/qt/qfontmetrics.h: Removed charWidth and changed _width to take QChar *.
+       * src/kwq/KWQFontMetrics.mm: Removed charWidth and changed _width to take QChar *.
+
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       Merged changes from KDE 3.0 final. Other fixes to get things compiling.
+
+       * src/kdelibs/khtml/css/css_valueimpl.cpp:
+       (CSSStyleDeclarationImpl::setProperty): Fix unused variable.
+       * src/kdelibs/khtml/khtmlview.cpp: (KHTMLView::contentsContextMenuEvent):
+       Fix unused variable.
+       * src/kdelibs/khtml/rendering/font.cpp: (Font::drawText), (Font::width),
+       (Font::update): Disable special "nsbp" logic for now. We can reenable it
+       if necessary.
+       * src/kdelibs/khtml/rendering/render_replaced.cpp: Fix mismerge.
+       * src/kdelibs/khtml/rendering/render_text.cpp: (RenderText::nodeAtPoint):
+       Fix unused variable.
+       * src/kwq/KWQApplication.mm: (QDesktopWidget::width), (QApplication::desktop):
+       Fix mismerge.
+       * src/kwq/KWQColorGroup.mm: Fix QCOLOR_GROUP_SIZE.
+       * src/kwq/KWQFontMetrics.mm: (QFontMetrics::lineSpacing): New.
+       (QFontMetrics::width): Remove unused optimization.
+       * src/kwq/qt/qfontmetrics.h: Add lineSpacing().
+
+2002-04-15  Darin Adler  <darin@apple.com>
+
+        Merged changes from previous merge pass.
+
+        2002-03-25  Darin Adler  <darin@apple.com>
+
+        Last bit of making stuff compile and link. Probably will drop the merge now
+        and take it up again when it's time to merge in KDE 3.0 final.
+
+       * src/kwq/KWQEvent.mm: (QFocusEvent::reason): New.
+       * src/kwq/KWQPainter.mm: (QPainter::drawText): New overload.
+
+        2002-03-25  Darin Adler  <darin@apple.com>
+
+       * src/kdelibs/khtml/rendering/font.cpp: (Font::width): Make it call _width so we
+        don't lose the optimization.
+        
+       * src/kwq/KWQApplication.mm: (QDesktopWidget::screenNumber): New.
+       (QDesktopWidget::screenGeometry): New.
+        (QApplication::style): New.
+       * src/kwq/KWQColorGroup.mm: (QColorGroup::highlight): New.
+       (QColorGroup::highlightedText): New.
+       * src/kwq/KWQFont.mm: (QFont::setPixelSize): New.
+       * src/kwq/KWQFontMetrics.mm: (QFontMetrics::charWidth): New.
+       * src/kwq/KWQKGlobal.mm: (KGlobal::locale): Implement.
+        (KLocale::KLocale): New.
+       (KLocale::languageList): New.
+       * src/kwq/KWQKHTMLPart.mm: (KHTMLPart::sheetUsed): New.
+       (KHTMLPart::setSheetUsed): New.
+        (KHTMLPart::zoomFactor): New.
+       * src/kwq/KWQKHTMLSettings.mm: (KHTMLSettings::mediumFontSize): New.
+       * src/kwq/KWQScrollView.mm: (QScrollView::childX): New.
+        (QScrollView::childY): New.
+        
+       * src/kwq/qt/qapplication.h: style() returns a QStyle &.
+       * src/kwq/qt/qpalette.h: Add Highlight and HighlightedText.
+
+        2002-03-24  Darin Adler  <darin@apple.com>
+
+        More compiling. Still won't link.
+
+       * src/kdelibs/khtml/khtmlview.cpp: Disable printing and drag and drop code.
+       * src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration):
+        Temporarily turn off our smarter underlining since it relies on access to the
+        string, and TextSlave doesn't have that any more.
+       (RenderText::nodeAtPoint): Get rid of a workaround we don't need any more for
+        a bug that was fixed by KDE folks.
+       * src/kwq/KWQApplication.mm: (QApplication::desktop): Make the desktop be a
+        QDesktopWidget.
+       * src/kwq/qt/qnamespace.h: Add MetaButton.
+       * src/kwq/qt/qtooltip.h: Add a maybeTip virtual function member and a virtual
+        destructor.
+
+        2002-03-24  Darin Adler  <darin@apple.com>
+
+        Some fixes to get more stuff to compile.
+
+       * src/kdelibs/khtml/ecma/kjs_dom.cpp: (DOMDocument::getValueProperty):
+        Don't try to look at the private m_bComplete to display "complete". Just do
+        "loading" and "loaded".
+        * src/kdelibs/khtml/khtmlpart_p.h: #ifdef this all out for APPLE_CHANGES.
+       * src/kdelibs/khtml/rendering/font.cpp: (Font::update): Add an explicit cast to
+        int to avoid float -> int warning.
+       * src/kdelibs/khtml/rendering/render_table.cpp: (RenderTable::calcColMinMax):
+        Add an explicit cast to int to avoid uint compared with int warning.
+       * src/kdelibs/khtml/xml/dom_docimpl.cpp: (DocumentImpl::recalcStyleSelector):
+        Use sheetUsed() and setSheetUsed() functions on KHTMLPart intead of getting
+        at private fields the way the real KDE code does.
+        
+        * src/kwq/KWQKHTMLPart.h: Declare zoomFactor(), sheetUsed(), and setSheetUsed().
+       * src/kwq/KWQStyle.h: Add PM_DefaultFramWidth as another metric.
+       * src/kwq/kdecore/klocale.h: Add languageList().
+       * src/kwq/khtml/khtml_settings.h: Add mediumFontSize().
+       * src/kwq/qt/qapplication.h: Add style() and QDesktopWidget.
+       * src/kwq/qt/qevent.h: Add reason().
+       * src/kwq/qt/qfont.h: Add setPixelSize(int).
+       * src/kwq/qt/qfontmetrics.h: Add charWidth() and _charWidth() functions.
+       * src/kwq/qt/qpainter.h: Add drawText() overload with position parameter.
+       * src/kwq/qt/qpalette.h: Add highlight() and highlightedText().
+       * src/kwq/qt/qscrollview.h: Add childX() and childY().
+        
+       * src/kwq/KWQApplication.mm: Change KWQDesktopWidget to QDesktopWidget.
+
 2002-04-11  Chris Blumenberg  <set EMAIL_ADDRESS environment variable>
 
         Added a symbol for WCPluginDatabase.
index 3c25ecc3b4b45fe3a49f20c07450106ae523cc90..d91446fb1522bd2b480d95b21753257711cfa892 100644 (file)
@@ -1,3 +1,161 @@
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       * src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration):
+       Remove some minor gratuitous diffs vs. KDE.
+
+2002-04-15  Richard Williamson  <rjw@apple.com>
+
+        Updated to reflect changes in KDE.
+        
+       * src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration):
+
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       * src/kdelibs/khtml/css/css_valueimpl.cpp:
+       (FontFamilyValueImpl::FontFamilyValueImpl): Fix comment.
+       * src/kdelibs/khtml/css/cssstyleselector.cpp: Remove some gratuitous diffs vs. KDE.
+       * src/kdelibs/khtml/html/html_objectimpl.cpp:
+       (HTMLEmbedElementImpl::parseAttribute): Remove unneeded copy from KWQ's early days.
+       * src/kdelibs/khtml/html/html_tableimpl.cpp:
+       (HTMLTableElementImpl::parseAttribute),
+       (HTMLTablePartElementImpl::parseAttribute): Remove unneeded copy from KWQ's early days.
+       * src/kdelibs/khtml/html/htmltokenizer.cpp: (HTMLTokenizer::processToken): Redo the
+       APPLE_CHANGES ifdef here.
+       * src/kdelibs/khtml/khtmlpart_p.h: Update to latest kde.
+       * src/kdelibs/khtml/khtmlview.cpp: (KHTMLView::KHTMLView): Add ifdef APPLE_CHANGES.
+       (KHTMLView::~KHTMLView): Add ifdef APPLE_CHANGES.
+       (KHTMLView::print): Remove code left in here during merge process.
+       * src/kwq/KWQKHTMLPart.mm: Remove unused setFontSizes(), fontSizes(), and
+       resetFontSizes(). After the merge is landed, remove more.
+       * src/libwebcore.exp: Export updateStyleSelector() for WebKit.
+
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       Fix text to it displays at the right font size.
+
+       * src/kdelibs/khtml/css/cssstyleselector.cpp:
+       (CSSStyleSelector::computeFontSizes): Apply the same SCREEN_RESOLUTION hack here
+       that we do elsewhere.
+       * src/kdelibs/khtml/rendering/font.cpp: (Font::width): Use kMin instead of max (oops).
+       (Font::update): Turn off font database chicanery.
+       * src/kwq/KWQKHTMLPart.mm: (KHTMLPart::zoomFactor): Use zoom factor 100, not 1.
+
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       More fixes so text displays (still at wrong font size).
+
+       * src/kdelibs/khtml/rendering/font.cpp: (max): New helper.
+       (Font::drawText): Simplified implementation for now.
+       (Font::width): Simplified implementation for now.
+       * src/kwq/KWQColorGroup.mm: Reinstated QCOLOR_GROUP_SIZE.
+
+       * src/kwq/qt/qfontmetrics.h: Removed charWidth and changed _width to take QChar *.
+       * src/kwq/KWQFontMetrics.mm: Removed charWidth and changed _width to take QChar *.
+
+2002-04-15  Darin Adler  <darin@apple.com>
+
+       Merged changes from KDE 3.0 final. Other fixes to get things compiling.
+
+       * src/kdelibs/khtml/css/css_valueimpl.cpp:
+       (CSSStyleDeclarationImpl::setProperty): Fix unused variable.
+       * src/kdelibs/khtml/khtmlview.cpp: (KHTMLView::contentsContextMenuEvent):
+       Fix unused variable.
+       * src/kdelibs/khtml/rendering/font.cpp: (Font::drawText), (Font::width),
+       (Font::update): Disable special "nsbp" logic for now. We can reenable it
+       if necessary.
+       * src/kdelibs/khtml/rendering/render_replaced.cpp: Fix mismerge.
+       * src/kdelibs/khtml/rendering/render_text.cpp: (RenderText::nodeAtPoint):
+       Fix unused variable.
+       * src/kwq/KWQApplication.mm: (QDesktopWidget::width), (QApplication::desktop):
+       Fix mismerge.
+       * src/kwq/KWQColorGroup.mm: Fix QCOLOR_GROUP_SIZE.
+       * src/kwq/KWQFontMetrics.mm: (QFontMetrics::lineSpacing): New.
+       (QFontMetrics::width): Remove unused optimization.
+       * src/kwq/qt/qfontmetrics.h: Add lineSpacing().
+
+2002-04-15  Darin Adler  <darin@apple.com>
+
+        Merged changes from previous merge pass.
+
+        2002-03-25  Darin Adler  <darin@apple.com>
+
+        Last bit of making stuff compile and link. Probably will drop the merge now
+        and take it up again when it's time to merge in KDE 3.0 final.
+
+       * src/kwq/KWQEvent.mm: (QFocusEvent::reason): New.
+       * src/kwq/KWQPainter.mm: (QPainter::drawText): New overload.
+
+        2002-03-25  Darin Adler  <darin@apple.com>
+
+       * src/kdelibs/khtml/rendering/font.cpp: (Font::width): Make it call _width so we
+        don't lose the optimization.
+        
+       * src/kwq/KWQApplication.mm: (QDesktopWidget::screenNumber): New.
+       (QDesktopWidget::screenGeometry): New.
+        (QApplication::style): New.
+       * src/kwq/KWQColorGroup.mm: (QColorGroup::highlight): New.
+       (QColorGroup::highlightedText): New.
+       * src/kwq/KWQFont.mm: (QFont::setPixelSize): New.
+       * src/kwq/KWQFontMetrics.mm: (QFontMetrics::charWidth): New.
+       * src/kwq/KWQKGlobal.mm: (KGlobal::locale): Implement.
+        (KLocale::KLocale): New.
+       (KLocale::languageList): New.
+       * src/kwq/KWQKHTMLPart.mm: (KHTMLPart::sheetUsed): New.
+       (KHTMLPart::setSheetUsed): New.
+        (KHTMLPart::zoomFactor): New.
+       * src/kwq/KWQKHTMLSettings.mm: (KHTMLSettings::mediumFontSize): New.
+       * src/kwq/KWQScrollView.mm: (QScrollView::childX): New.
+        (QScrollView::childY): New.
+        
+       * src/kwq/qt/qapplication.h: style() returns a QStyle &.
+       * src/kwq/qt/qpalette.h: Add Highlight and HighlightedText.
+
+        2002-03-24  Darin Adler  <darin@apple.com>
+
+        More compiling. Still won't link.
+
+       * src/kdelibs/khtml/khtmlview.cpp: Disable printing and drag and drop code.
+       * src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration):
+        Temporarily turn off our smarter underlining since it relies on access to the
+        string, and TextSlave doesn't have that any more.
+       (RenderText::nodeAtPoint): Get rid of a workaround we don't need any more for
+        a bug that was fixed by KDE folks.
+       * src/kwq/KWQApplication.mm: (QApplication::desktop): Make the desktop be a
+        QDesktopWidget.
+       * src/kwq/qt/qnamespace.h: Add MetaButton.
+       * src/kwq/qt/qtooltip.h: Add a maybeTip virtual function member and a virtual
+        destructor.
+
+        2002-03-24  Darin Adler  <darin@apple.com>
+
+        Some fixes to get more stuff to compile.
+
+       * src/kdelibs/khtml/ecma/kjs_dom.cpp: (DOMDocument::getValueProperty):
+        Don't try to look at the private m_bComplete to display "complete". Just do
+        "loading" and "loaded".
+        * src/kdelibs/khtml/khtmlpart_p.h: #ifdef this all out for APPLE_CHANGES.
+       * src/kdelibs/khtml/rendering/font.cpp: (Font::update): Add an explicit cast to
+        int to avoid float -> int warning.
+       * src/kdelibs/khtml/rendering/render_table.cpp: (RenderTable::calcColMinMax):
+        Add an explicit cast to int to avoid uint compared with int warning.
+       * src/kdelibs/khtml/xml/dom_docimpl.cpp: (DocumentImpl::recalcStyleSelector):
+        Use sheetUsed() and setSheetUsed() functions on KHTMLPart intead of getting
+        at private fields the way the real KDE code does.
+        
+        * src/kwq/KWQKHTMLPart.h: Declare zoomFactor(), sheetUsed(), and setSheetUsed().
+       * src/kwq/KWQStyle.h: Add PM_DefaultFramWidth as another metric.
+       * src/kwq/kdecore/klocale.h: Add languageList().
+       * src/kwq/khtml/khtml_settings.h: Add mediumFontSize().
+       * src/kwq/qt/qapplication.h: Add style() and QDesktopWidget.
+       * src/kwq/qt/qevent.h: Add reason().
+       * src/kwq/qt/qfont.h: Add setPixelSize(int).
+       * src/kwq/qt/qfontmetrics.h: Add charWidth() and _charWidth() functions.
+       * src/kwq/qt/qpainter.h: Add drawText() overload with position parameter.
+       * src/kwq/qt/qpalette.h: Add highlight() and highlightedText().
+       * src/kwq/qt/qscrollview.h: Add childX() and childY().
+        
+       * src/kwq/KWQApplication.mm: Change KWQDesktopWidget to QDesktopWidget.
+
 2002-04-11  Chris Blumenberg  <set EMAIL_ADDRESS environment variable>
 
         Added a symbol for WCPluginDatabase.
index 97cf3bea438a4e3464b00ee6bfcc006787505f6e..145be8545762ad8becda253c8297c53cf821d842 100644 (file)
@@ -244,8 +244,10 @@ CSSMediaRuleImpl::CSSMediaRuleImpl( StyleBaseImpl *parent, const QChar *&curP,
 
 CSSMediaRuleImpl::~CSSMediaRuleImpl()
 {
-    if( m_lstMedia )
+    if( m_lstMedia ) {
+       m_lstMedia->setParent( 0 );
         m_lstMedia->deref();
+    }
     m_lstCSSRules->deref();
 }
 
@@ -347,66 +349,11 @@ CSSStyleDeclarationImpl *CSSStyleRuleImpl::style() const
 
 DOM::DOMString CSSStyleRuleImpl::selectorText() const
 {
-    if ( m_selector ) {
+    if ( m_selector && m_selector->first() ) {
         // ### m_selector will be a single selector hopefully. so ->first() will disappear
         CSSSelector* cs = m_selector->first();
-        DOMString str;
-        if ( cs->tag == -1 && cs->attr == ATTR_ID && cs->match == CSSSelector::Exact )
-        {
-            str = "#";
-            str += cs->value;
-        }
-        else if ( cs->tag == -1 && cs->attr == ATTR_CLASS && cs->match == CSSSelector::List )
-        {
-            str = ".";
-            str += cs->value;
-        }
-        else if ( cs->tag == -1 && cs->match == CSSSelector::Pseudo )
-        {
-            str = ":";
-            str += cs->value;
-        }
-        else
-        {
-            if ( cs->tag == -1 )
-                str = "*";
-            else
-                str = getTagName( cs->tag );
-            // optional attribute
-            if ( cs->attr ) {
-                DOMString attrName = getAttrName( cs->attr );
-                str += "[";
-                str += attrName;
-                switch (cs->match) {
-                case CSSSelector::Exact:
-                    str += "=";
-                    break;
-                case CSSSelector::Set:
-                    str += " "; /// ## correct?
-                    break;
-                case CSSSelector::List:
-                    str += "~=";
-                    break;
-                case CSSSelector::Hyphen:
-                    str += "|=";
-                    break;
-                case CSSSelector::Begin:
-                    str += "^=";
-                    break;
-                case CSSSelector::End:
-                    str += "$=";
-                    break;
-                case CSSSelector::Contain:
-                    str += "*=";
-                    break;
-                default:
-                    kdWarning(6080) << "Unhandled case in CSSStyleRuleImpl::selectorText : match=" << cs->match << endl;
-                }
-                str += "\"";
-                str += cs->value;
-                str += "\"]";
-            }
-        }
+        cs->print(); // debug
+        DOMString str = cs->selectorText();
         return str;
     }
     return DOMString();
index b2f279587c8fc5954e7acd3d28d5590cbd96fb22..e5485e2777aaf283261b603da2b285114c2a13c1 100644 (file)
@@ -18,7 +18,6 @@
  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  *
- * $Id$
  */
 #ifndef _CSS_css_ruleimpl_h_
 #define _CSS_css_ruleimpl_h_
index 05156b11c58a833f692e1ca2f2b723694457f748..21780e197b4cb58c6c19ad0265234d0c22e5d5cb 100644 (file)
@@ -18,7 +18,6 @@
  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  *
- * $Id$
  */
 
 //#define CSS_STYLESHEET_DEBUG
@@ -73,7 +72,10 @@ StyleSheetImpl::StyleSheetImpl(StyleBaseImpl *owner, DOMString href)
 
 StyleSheetImpl::~StyleSheetImpl()
 {
-    if(m_media) m_media->deref();
+    if(m_media) {
+       m_media->setParent( 0 );
+       m_media->deref();
+    }
 }
 
 bool StyleSheetImpl::deleteMe()
@@ -121,11 +123,11 @@ MediaListImpl *StyleSheetImpl::media() const
 
 void StyleSheetImpl::setMedia( MediaListImpl *media )
 {
+    if( media )
+       media->ref();
     if( m_media )
-        m_media->deref();
+       m_media->deref();
     m_media = media;
-    if( m_media )
-        m_media->ref();
 }
 
 // -----------------------------------------------------------------------
index aff8694fafb83d74c937fa35fcbc8851d1e7f775..b4554846457d76bdbdfff577235d45dfc0fc65e8 100644 (file)
@@ -18,7 +18,6 @@
  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  *
- * $Id$
  */
 #ifndef _CSS_css_stylesheetimpl_h_
 #define _CSS_css_stylesheetimpl_h_
index 94800e00a16bfb1d6cd171c89164219d86443a0b..8bdbd6910cd4940b7aa704d0d4d89c72568a0ee6 100644 (file)
 #include "css/cssvalues.h"
 
 #include "xml/dom_stringimpl.h"
-#include "xml/dom_nodeimpl.h"
+#include "xml/dom_docimpl.h"
 
 #include "misc/loader.h"
 
+#include "rendering/render_style.h"
+
 #include <kdebug.h>
 #include <qregexp.h>
+#include <qpaintdevice.h>
+#include <qpaintdevicemetrics.h>
 
 // Hack for debugging purposes
 extern DOM::DOMString getPropertyName(unsigned short id);
@@ -56,6 +60,23 @@ CSSStyleDeclarationImpl::CSSStyleDeclarationImpl(CSSRuleImpl *parent, QPtrList<C
     m_node = 0;
 }
 
+CSSStyleDeclarationImpl&  CSSStyleDeclarationImpl::operator= (const CSSStyleDeclarationImpl& o)
+{
+    // don't attach it to the same node, just leave the current m_node value
+    delete m_lstValues;
+    m_lstValues = 0;
+    if (o.m_lstValues) {
+        m_lstValues = new QPtrList<CSSProperty>;
+        m_lstValues->setAutoDelete( true );
+
+        QPtrListIterator<CSSProperty> lstValuesIt(*o.m_lstValues);
+        for (lstValuesIt.toFirst(); lstValuesIt.current(); ++lstValuesIt)
+            m_lstValues->append(new CSSProperty(*lstValuesIt.current()));
+    }
+
+    return *this;
+}
+
 CSSStyleDeclarationImpl::~CSSStyleDeclarationImpl()
 {
     delete m_lstValues;
@@ -70,9 +91,7 @@ CSSValueImpl *CSSStyleDeclarationImpl::getPropertyCSSValue( int propertyID )
     for (lstValuesIt.toLast(); lstValuesIt.current(); --lstValuesIt)
         if (lstValuesIt.current()->m_id == propertyID && !lstValuesIt.current()->nonCSSHint)
             return lstValuesIt.current()->value();
-#if APPLE_CHANGES
     return 0;
-#endif
 }
 
 DOMString CSSStyleDeclarationImpl::removeProperty( int propertyID, bool NonCSSHint )
@@ -85,14 +104,29 @@ DOMString CSSStyleDeclarationImpl::removeProperty( int propertyID, bool NonCSSHi
         if (lstValuesIt.current()->m_id == propertyID && NonCSSHint == lstValuesIt.current()->nonCSSHint) {
             value = lstValuesIt.current()->value()->cssText();
             m_lstValues->removeRef(lstValuesIt.current());
-            if (m_node)
-                m_node->setChanged(true);
+            setChanged();
+
             return value;
         }
 
     return value;
 }
 
+void CSSStyleDeclarationImpl::setChanged()
+{
+    if (m_node) {
+        m_node->setChanged();
+        return;
+    }
+
+    // ### quick&dirty hack for KDE 3.0... make this MUCH better! (Dirk)
+    for (StyleBaseImpl* stylesheet = this; stylesheet; stylesheet = stylesheet->parent())
+        if (stylesheet->isCSSStyleSheet()) {
+            static_cast<CSSStyleSheetImpl*>(stylesheet)->doc()->updateStyleSelector();
+            break;
+        }
+}
+
 bool CSSStyleDeclarationImpl::getPropertyPriority( int propertyID )
 {
     if(!m_lstValues) return false;
@@ -120,8 +154,8 @@ void CSSStyleDeclarationImpl::setProperty(int id, const DOMString &value, bool i
     if(!success)
        kdDebug( 6080 ) << "CSSStyleDeclarationImpl::setProperty invalid property: [" << getPropertyName(id).string()
                                        << "] value: [" << value.string() << "]"<< endl;
-    if (m_node)
-       m_node->setChanged(true);
+    else
+        setChanged();
 }
 
 void CSSStyleDeclarationImpl::setProperty(int id, int value, bool important, bool nonCSSHint)
@@ -134,9 +168,7 @@ void CSSStyleDeclarationImpl::setProperty(int id, int value, bool important, boo
 
     CSSValueImpl * cssValue = new CSSPrimitiveValueImpl(value);
     setParsedValue(id, cssValue, important, nonCSSHint, m_lstValues);
-
-    if (m_node)
-       m_node->setChanged(true);
+    setChanged();
 }
 
 void CSSStyleDeclarationImpl::setProperty ( const DOMString &propertyString)
@@ -152,22 +184,22 @@ void CSSStyleDeclarationImpl::setProperty ( const DOMString &propertyString)
 
     props->setAutoDelete(false);
 
+#ifndef APPLE_CHANGES
     unsigned int i = 0;
+#endif
     if(!m_lstValues) {
        m_lstValues = new QPtrList<CSSProperty>;
        m_lstValues->setAutoDelete( true );
     }
-    while(i < props->count())
-    {
+
+    for (unsigned int i = 0; i < props->count(); ++i) {
        //kdDebug( 6080 ) << "setting property" << endl;
        CSSProperty *prop = props->at(i);
        removeProperty(prop->m_id, false);
        m_lstValues->append(prop);
-       i++;
     }
     delete props;
-    if (m_node)
-       m_node->setChanged(true);
+    setChanged();
 }
 
 void CSSStyleDeclarationImpl::setLengthProperty(int id, const DOM::DOMString &value, bool important, bool nonCSSHint)
@@ -350,6 +382,64 @@ void CSSPrimitiveValueImpl::cleanup()
     m_type = 0;
 }
 
+int CSSPrimitiveValueImpl::computeLength( khtml::RenderStyle *style, QPaintDeviceMetrics *devMetrics )
+{
+    return ( int ) computeLengthFloat( style, devMetrics );
+}
+
+float CSSPrimitiveValueImpl::computeLengthFloat( khtml::RenderStyle *style, QPaintDeviceMetrics *devMetrics )
+{
+    unsigned short type = primitiveType();
+
+    float dpiY = 72.; // fallback
+    if ( devMetrics )
+        dpiY = devMetrics->logicalDpiY();
+#ifdef APPLE_CHANGES
+    // FIXME: SCREEN_RESOLUTION hack good enough to keep?
+    if ( !khtml::printpainter && dpiY < SCREEN_RESOLUTION )
+        dpiY = SCREEN_RESOLUTION;
+#else /* APPLE_CHANGES not defined */
+    if ( !khtml::printpainter && dpiY < 96 )
+        dpiY = 96.;
+#endif /* APPLE_CHANGES not defined */
+    
+    float factor = 1.;
+    switch(type)
+    {
+    case CSSPrimitiveValue::CSS_EMS:
+               factor = style->font().pixelSize();
+               break;
+    case CSSPrimitiveValue::CSS_EXS:
+       {
+        QFontMetrics fm = style->fontMetrics();
+        QRect b = fm.boundingRect('x');
+        factor = b.height();
+        break;
+       }
+    case CSSPrimitiveValue::CSS_PX:
+        break;
+    case CSSPrimitiveValue::CSS_CM:
+       factor = dpiY/2.54; //72dpi/(2.54 cm/in)
+        break;
+    case CSSPrimitiveValue::CSS_MM:
+       factor = dpiY/25.4;
+        break;
+    case CSSPrimitiveValue::CSS_IN:
+            factor = dpiY;
+        break;
+    case CSSPrimitiveValue::CSS_PT:
+            factor = dpiY/72.;
+        break;
+    case CSSPrimitiveValue::CSS_PC:
+        // 1 pc == 12 pt
+            factor = dpiY*12./72.;
+        break;
+    default:
+        return -1;
+    }
+    return getFloatValue(type)*factor;
+}
+
 void CSSPrimitiveValueImpl::setFloatValue( unsigned short unitType, float floatValue, int &exceptioncode )
 {
     exceptioncode = 0;
@@ -574,14 +664,18 @@ FontFamilyValueImpl::FontFamilyValueImpl( const QString &string)
 {
 #ifdef APPLE_CHANGES
     parsedFontName = string;
+    // a language tag is often added in braces at the end. Remove it.
     parsedFontName.replace(QRegExp(" \\(.*\\)$"), "");
+    // remove [Xft] qualifiers
+    parsedFontName.replace(QRegExp(" \\[.*\\]$"), "");
 #else
     const QString &available = KHTMLSettings::availableFamilies();
 
     QString face = string.lower();
     // a languge tag is often added in braces at the end. Remove it.
     face = face.replace(QRegExp(" \\(.*\\)$"), "");
-    parsedFontName = face;
+    // remove [Xft] qualifiers
+    face = face.replace(QRegExp(" \\[.*\\]$"), "");
     //kdDebug(0) << "searching for face '" << face << "'" << endl;
     if(face == "serif" ||
        face == "sans-serif" ||
index ba2f46afc7d77bbec4f9dfb96c2403818686dc97..51812b1fccdebeae94ae9385d8a2214ca8e7fb7d 100644 (file)
@@ -18,7 +18,6 @@
  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  *
- * $Id$
  */
 #ifndef _CSS_css_valueimpl_h_
 #define _CSS_css_valueimpl_h_
@@ -31,6 +30,7 @@
 #include <qintdict.h>
 
 namespace khtml {
+    class RenderStyle;
     class CachedImage;
 };
 
@@ -47,9 +47,10 @@ class CSSStyleDeclarationImpl : public StyleBaseImpl
 public:
     CSSStyleDeclarationImpl(CSSRuleImpl *parentRule);
     CSSStyleDeclarationImpl(CSSRuleImpl *parentRule, QPtrList<CSSProperty> *lstValues);
-
     virtual ~CSSStyleDeclarationImpl();
 
+    CSSStyleDeclarationImpl& operator=( const CSSStyleDeclarationImpl&);
+
     unsigned long length() const;
     CSSRuleImpl *parentRule() const;
     DOM::DOMString removeProperty( int propertyID, bool NonCSSHints = false );
@@ -76,9 +77,15 @@ public:
     QPtrList<CSSProperty> *values() { return m_lstValues; }
     void setNode(NodeImpl *_node) { m_node = _node; }
 
+    void setChanged();
+
 protected:
     QPtrList<CSSProperty> *m_lstValues;
     NodeImpl *m_node;
+
+private:
+    // currently not needed - make sure its not used
+    CSSStyleDeclarationImpl(const CSSStyleDeclarationImpl& o);
 };
 
 class CSSValueImpl : public StyleBaseImpl
@@ -153,6 +160,21 @@ public:
            return m_type;
     }
 
+    /*
+     * computes a length in pixels out of the given CSSValue. Need the RenderStyle to get
+     * the fontinfo in case val is defined in em or ex.
+     *
+     * The metrics have to be a bit different for screen and printer output.
+     * For screen output we assume 1 inch == 72 px, for printer we assume 300 dpi
+     *
+     * this is screen/printer dependent, so we probably need a config option for this,
+     * and some tool to calibrate.
+     */
+    int computeLength( khtml::RenderStyle *style, QPaintDeviceMetrics *devMetrics );
+
+    float computeLengthFloat( khtml::RenderStyle *style, QPaintDeviceMetrics *devMetrics );
+
+
     // use with care!!!
     void setPrimitiveType(unsigned short type) { m_type = type; }
     void setFloatValue ( unsigned short unitType, float floatValue, int &exceptioncode );
@@ -262,9 +284,17 @@ public:
     CSSProperty()
     {
        m_id = -1;
-       m_value = 0;
        m_bImportant = false;
        nonCSSHint = false;
+        m_value = 0;
+    }
+    CSSProperty(const CSSProperty& o)
+    {
+        m_id = o.m_id;
+        m_bImportant = o.m_bImportant;
+        nonCSSHint = o.nonCSSHint;
+        m_value = o.m_value;
+        if (m_value) m_value->ref();
     }
     ~CSSProperty() {
        if(m_value) m_value->deref();
index 08e5e4cd84b93cd8d1e5bfcc66bd286be2b13f89..e09e8688fbf73dfca29181465233ed75db2435b8 100644 (file)
@@ -18,7 +18,6 @@
  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  *
- * $Id$
  */
 #include "csshelper.h"
 
 using namespace DOM;
 using namespace khtml;
 
-int khtml::computeLength(DOM::CSSPrimitiveValueImpl *val, RenderStyle *style, QPaintDeviceMetrics *devMetrics )
-{
-    return ( int ) computeLengthFloat( val, style, devMetrics );
-}
-
-float khtml::computeLengthFloat(DOM::CSSPrimitiveValueImpl *val, RenderStyle *style, QPaintDeviceMetrics *devMetrics )
-{
-    unsigned short type = val->primitiveType();
-
-    float dpiY = 72.; // fallback
-    if ( devMetrics )
-        dpiY = devMetrics->logicalDpiY();
-#ifdef APPLE_CHANGES
-    // FIXME: SCREEN_RESOLUTION hack good enough to keep?
-    if ( !khtml::printpainter && dpiY < SCREEN_RESOLUTION )
-        dpiY = SCREEN_RESOLUTION;
-#else /* APPLE_CHANGES not defined */
-    if ( !khtml::printpainter && dpiY < 96 )
-        dpiY = 96.;
-#endif /* APPLE_CHANGES not defined */
-
-    float factor = 1.;
-    switch(type)
-    {
-    case CSSPrimitiveValue::CSS_EMS:
-               factor = style->font().pixelSize();
-               break;
-    case CSSPrimitiveValue::CSS_EXS:
-       {
-        QFontMetrics fm = style->fontMetrics();
-        QRect b = fm.boundingRect('x');
-        factor = b.height();
-        break;
-       }
-    case CSSPrimitiveValue::CSS_PX:
-        break;
-    case CSSPrimitiveValue::CSS_CM:
-       factor = dpiY/2.54; //72dpi/(2.54 cm/in)
-        break;
-    case CSSPrimitiveValue::CSS_MM:
-       factor = dpiY/25.4;
-        break;
-    case CSSPrimitiveValue::CSS_IN:
-            factor = dpiY;
-        break;
-    case CSSPrimitiveValue::CSS_PT:
-            factor = dpiY/72.;
-        break;
-    case CSSPrimitiveValue::CSS_PC:
-        // 1 pc == 12 pt
-            factor = dpiY*12./72.;
-        break;
-    default:
-        return -1;
-    }
-    return val->getFloatValue(type)*factor;
-}
 
 DOMString khtml::parseURL(const DOMString &url)
 {
@@ -143,53 +85,3 @@ DOMString khtml::parseURL(const DOMString &url)
 
     return j;
 }
-
-
-void khtml::setFontSize( QFont &f,  int  pixelsize, const KHTMLSettings *s, QPaintDeviceMetrics *devMetrics )
-{
-#ifndef APPLE_CHANGES
-    QFontDatabase db;
-#endif /* APPLE_CHANGES not defined */
-
-    float size = pixelsize;
-
-#ifndef APPLE_CHANGES
-    float toPix = devMetrics->logicalDpiY()/72.;
-
-    // ok, now some magic to get a nice unscaled font
-    // ### all other font properties should be set before this one!!!!
-    // ####### make it use the charset needed!!!!
-
-    if( !db.isSmoothlyScalable(f.family(), db.styleString(f)) )
-    {
-        QValueList<int> pointSizes = db.smoothSizes(f.family(), db.styleString(f));
-        // lets see if we find a nice looking font, which is not too far away
-        // from the requested one.
-        //kdDebug(6080) << "khtml::setFontSize family = " << f.family() << " size requested=" << size << endl;
-
-        QValueList<int>::Iterator it;
-        float diff = 1; // ### 100% deviation
-        float bestSize = 0;
-        for( it = pointSizes.begin(); it != pointSizes.end(); ++it )
-        {
-            float newDiff = ((*it)*toPix - size)/size;
-            //kdDebug( 6080 ) << "smooth font size: " << *it << " diff=" << newDiff << endl;
-            if(newDiff < 0) newDiff = -newDiff;
-            if(newDiff < diff)
-            {
-                diff = newDiff;
-                bestSize = *it;
-            }
-        }
-        //kdDebug( 6080 ) << "best smooth font size: " << bestSize << " diff=" << diff << endl;
-        if ( bestSize != 0 && diff < 0.2 ) // 20% deviation, otherwise we use a scaled font...
-            size = bestSize*toPix;
-//         else if ( size > 4 && size < 16 )
-//             size = float( int( ( size + 1 ) / 2 )*2 );
-    }
-#endif /* APPLE_CHANGES not defined */
-
-    //qDebug(" -->>> using %f pixel font", size);
-
-    f.setPixelSizeFloat( size );
-}
index db0d5deabeff8a44f390133e31c5a1318300ba73..b01ed6dee3c3610b9138b77caa580428d488f168 100644 (file)
@@ -18,7 +18,6 @@
  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  *
- * $Id$
  */
 #ifndef css_helper_h
 #define css_helper_h
@@ -40,30 +39,11 @@ namespace khtml
 {
     class RenderStyle;
 
-    /*
-     * computes a length in pixels out of the given CSSValue. Need the RenderStyle to get
-     * the fontinfo in case val is defined in em or ex.
-     *
-     * The metrics have to be a bit different for screen and printer output.
-     * For screen output we assume 1 inch == 72 px, for printer we assume 300 dpi
-     *
-     * this is screen/printer dependent, so we probably need a config option for this,
-     * and some tool to calibrate.
-     */
-    int computeLength(DOM::CSSPrimitiveValueImpl *val, RenderStyle *style, QPaintDeviceMetrics *devMetrics );
-
-    float computeLengthFloat(DOM::CSSPrimitiveValueImpl *val, RenderStyle *style, QPaintDeviceMetrics *devMetrics );
-
     /*
      * mostly just removes the url("...") brace
      */
     DOM::DOMString parseURL(const DOM::DOMString &url);
 
-    /*
-      Sets the font to the size closest to the requested one while trying not to use a scaled bitmap font
-    */
-    void setFontSize(  QFont &f,  int pixelSize, const KHTMLSettings *s, QPaintDeviceMetrics *devMetrics );
-
 };
 
 
index e4e6e108a3cbb8fe4d4b1cd988da9ef3b0364220..43c8bb11a7bed7b910ba2ffddaae6b93dd9e69f9 100644 (file)
@@ -816,24 +816,19 @@ static const QChar *getNext( const QChar *curP, const QChar *endP, bool &last )
     last = false;
     const QChar *nextP = curP;
     bool ignoreSpace = false;
-    while(nextP <= endP) {
+    while(nextP < endP) {
        if ( *nextP == '(' ) {
            ignoreSpace = true;
        } else if ( *nextP == ')' ) {
            ignoreSpace = false;
        }
-       if ( *nextP == ' ' && !ignoreSpace ) {
-           if (nextP == endP) {
-               last = true;
-           }
-           break;
-       }
-       if ( *nextP == ';' || nextP == endP ) {
-           last = true;
-           break;
-       }
+       if ( *nextP == ' ' && !ignoreSpace )
+            return nextP;
+       if ( *nextP == ';')
+            break;
        nextP++;
     }
+    last = true;
     return nextP;
 }
 // ------------------- begin font property ---------------------
@@ -1410,7 +1405,7 @@ bool StyleBaseImpl::parseValue( const QChar *curP, const QChar *endP, int propId
        {
          if (cssval) {
             int id = cssval->id;
-            if (id >= CSS_VAL_LEFT && id <= CSS_VAL__KONQ_CENTER) {
+            if (id >= CSS_VAL__KONQ_AUTO && id <= CSS_VAL__KONQ_CENTER) {
              parsedValue = new CSSPrimitiveValueImpl(id);
              break;
             }
@@ -1647,9 +1642,10 @@ bool StyleBaseImpl::parseValue( const QChar *curP, const QChar *endP, int propId
            } else {
              const QString str(value.stripWhiteSpace()); // ### Optimize
              if (str.left(4).lower() == "url(") {
-               DOMString value(curP, endP - curP);
-               value = khtml::parseURL(value);
-               parsedValue = new CSSImageValueImpl(value, this);
+                  DOMString value(curP, endP - curP);
+                  value = khtml::parseURL(value);
+                  if (!value.isEmpty())
+                    parsedValue = new CSSImageValueImpl(DOMString(KURL(baseURL().string(), value.string()).url()), this);
 #ifdef CSS_DEBUG
                kdDebug( 6080 ) << "image, url=" << value.string() << " base=" << baseURL().string() << endl;
 #endif
@@ -1883,13 +1879,12 @@ bool StyleBaseImpl::parseValue( const QChar *curP, const QChar *endP, int propId
       case CSS_PROP_TEXT_DECORATION:
        // none | [ underline || overline || line-through || blink ] | inherit
        {
-         if (cssval) {
-           if (cssval->id == CSS_VAL_NONE) {
+           if (cssval && cssval->id == CSS_VAL_NONE) {
              parsedValue = new CSSPrimitiveValueImpl(cssval->id);
            } else {
              CSSValueListImpl *list = new CSSValueListImpl;
              value.simplifyWhiteSpace();
-             //kdDebug( 6080 ) << "text-decoration: '" << str << "'" << endl;
+             //kdDebug( 6080 ) << "text-decoration: '" << value << "'" << endl;
              int pos=0, pos2;
              while( 1 )
                {
@@ -1912,7 +1907,6 @@ bool StyleBaseImpl::parseValue( const QChar *curP, const QChar *endP, int propId
                 delete list;
              }
            }
-         }
          break;
        }
       case CSS_PROP__KONQ_FLOW_MODE:
@@ -2099,7 +2093,9 @@ bool StyleBaseImpl::parseAuralValue( const QChar *curP, const QChar *endP, int p
         } else {
             DOMString value(curP, endP - curP);
             value = khtml::parseURL(value);
-            parsedValue = new CSSPrimitiveValueImpl(value, CSSPrimitiveValue::CSS_URI);
+            parsedValue = new CSSPrimitiveValueImpl(
+                DOMString(KURL(baseURL(), value).url()),
+                CSSPrimitiveValue::CSS_URI);
         }
         break;
     }
@@ -2225,7 +2221,7 @@ void StyleBaseImpl::setParsedValue( int propId, const CSSValueImpl *parsedValue)
     m_propList->append(prop);
 #ifdef CSS_DEBUG
     kdDebug( 6080 ) << "added property: " << getPropertyName(propId).string()
-                    << ", value: " << parsedValue->cssText().string()
+                    // non implemented yet << ", value: " << parsedValue->cssText().string()
                     << " important: " << prop->m_bImportant
                     << " nonCSS: " << prop->nonCSSHint << endl;
 #endif
@@ -2245,7 +2241,7 @@ bool StyleBaseImpl::parseShortHand(const QChar *curP, const QChar *endP, const i
        fnd[i] = false;
 
 #ifdef CSS_DEBUG
-    kdDebug(6080) << "PSH: parsing \"" << QString(curP, endP - curP) << "\"" << endl;
+    kdDebug(6080) << "PSH: parsing \"" << QString(curP, endP - curP) << "\" num=" << num << endl;
 #endif
 
     for (int j = 0; j < num; ++j) {
@@ -2255,6 +2251,7 @@ bool StyleBaseImpl::parseShortHand(const QChar *curP, const QChar *endP, const i
         for (int propIndex = 0; propIndex < num; ++propIndex) {
             if (!fnd[propIndex]) {
                // We have to tread this seperately
+               //kdDebug(6080) << "LOOKING FOR: " << getPropertyName(properties[propIndex]).string() << endl;
                bool found = false;
                if (!isLast && properties[propIndex] == CSS_PROP_BACKGROUND_POSITION)
                    found = parseBackgroundPosition(curP, nextP, endP);
@@ -2314,7 +2311,7 @@ bool StyleBaseImpl::parseBackgroundPosition(const QChar *curP, const QChar *&nex
        // We have not found a pair of Background-Positions, see if we have a single value
 
        //kdDebug(6080) << "BKCGR: Single: \"" << QString(curP, nextP - curP) << "\"" << endl;
-       found = parseValue(curP, bckgrNextP, CSS_PROP_BACKGROUND_POSITION);
+       found = parseValue(curP, nextP, CSS_PROP_BACKGROUND_POSITION);
     } else {
        // Moving on
        nextP = bckgrNextP;
@@ -2327,13 +2324,9 @@ bool StyleBaseImpl::parseBackgroundPosition(const QChar *curP, const QChar *&nex
 CSSValueImpl* StyleBaseImpl::parseContent(const QChar *curP, const QChar *endP)
 {
     CSSValueListImpl* values = new CSSValueListImpl();
-    
+
     QPtrList<QChar> list = splitContent(curP, endP);
-#if APPLE_CHANGES
-    for(unsigned n=0; n<list.count(); n+=2)
-#else
-    for(int n=0; n<list.count(); n+=2)
-#endif
+    for(uint n=0; n<list.count(); n+=2)
     {
         QString str(list.at(n), list.at(n+1)-list.at(n));
         CSSValueImpl* parsedValue=0;
@@ -2343,7 +2336,8 @@ CSSValueImpl* StyleBaseImpl::parseContent(const QChar *curP, const QChar *endP)
             // url
            DOMString value(curP, endP - curP);
            value = khtml::parseURL(value);
-            parsedValue = new CSSImageValueImpl(value, this);
+            parsedValue = new CSSImageValueImpl(
+                DOMString(KURL(baseURL().string(), value.string()).url()), this);
     #ifdef CSS_DEBUG
            kdDebug( 6080 ) << "content, url=" << value.string() << " base=" << baseURL().string() << endl;
     #endif
@@ -2351,27 +2345,27 @@ CSSValueImpl* StyleBaseImpl::parseContent(const QChar *curP, const QChar *endP)
         else if (str.left(5) == "attr(")
         {
             // attr
-        }           
+        }
         else if (str.left(8) == "counter(")
         {
             // counter
-        }   
+        }
         else if (str == "open-quote")
         {
             // open-quote
-        }    
+        }
         else if (str == "close-quote")
         {
             // open-quote
-        }    
+        }
         else if (str == "no-open-quote")
         {
             // no-open-quote
-        }    
-        else if (str == "no-close-quote")   
+        }
+        else if (str == "no-close-quote")
         {
             // no-close-quote
-        }                      
+        }
         else
         {
             // string
@@ -2384,8 +2378,8 @@ CSSValueImpl* StyleBaseImpl::parseContent(const QChar *curP, const QChar *endP)
 
     }
     return values;
-}    
-    
+}
+
 
 
 QPtrList<QChar> StyleBaseImpl::splitContent(const QChar *curP, const QChar *endP)
@@ -2396,12 +2390,12 @@ QPtrList<QChar> StyleBaseImpl::splitContent(const QChar *curP, const QChar *endP
     while(!last) {
         const QChar *nextP = curP;
         bool q = false;
-        bool dq = false;        
+        bool dq = false;
         if(*nextP=='\'')
             q=true;
         else if (*nextP=='\"')
             dq=true;
-        while(!(nextP->isSpace()) || q || dq) {            
+        while(!(nextP->isSpace()) || q || dq) {
             nextP++;
             if(nextP >= endP){
                 last = true;
@@ -2411,12 +2405,12 @@ QPtrList<QChar> StyleBaseImpl::splitContent(const QChar *curP, const QChar *endP
                 nextP++;
                 if(nextP >= endP) last= true;
                 break;
-            }            
+            }
         }
-        
+
         list.append(curP+((q||dq)?1:0));
         list.append(nextP-((q||dq)?1:0));
-        
+
         if ( last ) break;
         while(nextP->isSpace()) { // skip over WS between tokens
             nextP++;
@@ -2758,7 +2752,7 @@ StyleBaseImpl::parseRule(const QChar *&curP, const QChar *endP)
     kdDebug( 6080 ) << "parse rule: current = " << curP->latin1() << endl;
 #endif
 
-    if (*curP == '@' )
+    if (*curP == '@' && curP != endP && ( (curP+1)->isLetter() || (curP+1)->unicode() > 0xa0 )  )
     {
         rule = parseAtRule(curP, endP);
     }
@@ -2799,6 +2793,7 @@ const QString StyleBaseImpl::preprocess(const QString &str, bool justOneRule)
   bool dq = false;     // Within double quote
   bool bracket = false;        // Within brackets, e.g. url(ThisIsStupid)
   bool comment = false; // Within comment
+  bool skipgarbage = !justOneRule; // skip <!-- and ---> only in specifc places
   bool firstChar = false; // Beginning of comment either /* or */
   bool space = true;    // Last token was space
   int curlyBracket = 0; // Within curlyBrackets -> lower
@@ -2814,28 +2809,15 @@ const QString StyleBaseImpl::preprocess(const QString &str, bool justOneRule)
   kdDebug(6080) << "Length: " << orgLength << endl;
 #endif
 
-  if (!(justOneRule)) {
-    /* Remove start of SGML Comment which hides CSS from 3.0 Browsers */
-    while((ch < last) && (ch->isSpace())) { ++ch; }
-    if ((*ch == '<') && ((ch+4) < last) &&
-       (*(ch+1) == '!') && (*(ch+2) == '-') && (*(ch+3) == '-')) {
-      ch = ch+4; //skip '<!--'
-    }
-
-    /* Remove end of SGML Comment which hides CSS from 3.0 Browsers */
-    while ((last > ch) && ((last-1)->isSpace())) { --last; }
-    if ((*(last-1) == '>') && ((last-3) > ch) &&
-       (*(last-2) == '-') && (*(last-3) == '-')) {
-      last = last-3; //skip '-->'
-    }
-  }
-
   while(ch < last) {
+//       qDebug("current: *%s*, sq=%d dq=%d b=%d c=%d fC=%d space=%d cB=%d sg=%d",
+//              QConstString(ch, kMin(last-ch, 10)).string().latin1(), sq, dq, bracket, comment, firstChar, space, curlyBracket, skipgarbage);
     if( !comment && !sq && *ch == '"' ) {
       dq = !dq;
       processed += *ch;
-      space = false;
+      space = skipgarbage = false;
     } else if ( !comment && !dq && *ch == '\'') {
+      skipgarbage = sq;
       sq = !sq;
       processed += *ch;
       space = false;
@@ -2843,28 +2825,35 @@ const QString StyleBaseImpl::preprocess(const QString &str, bool justOneRule)
       bracket = true;
       processed += *ch;
       space = true;  // Explictly true
+      skipgarbage = false;
     } else if ( !comment && !dq && !sq && *ch == ')') {
       bracket = false;
       processed += *ch;
       processed += QChar(' '); // Adding a space after this token
       space = true;
+      skipgarbage = false;
     } else if ( !comment && !dq && !sq && *ch == '{') {
       ++curlyBracket;
       processed += *ch;
       space = true;  // Explictly true
+      skipgarbage = true;
     } else if ( !comment && !dq && !sq && *ch == '}') {
       --curlyBracket;
       processed += *ch;
       processed += QChar(' '); // Adding a space after this token
       space = true;
+      skipgarbage = true;
+    } else if ( !comment && skipgarbage && !dq && !sq && (*ch == '-') && ((ch+2) < last)  /* SGML Comment */
+                && (*(ch+1) == '-') && (*(ch+2) == '>')) {
+        ch += 2; // skip -->
+    } else if ( !comment && skipgarbage && !dq && !sq && (*ch == '<') && ((ch+3) < last)  /* SGML Comment */
+                && (*(ch+1) == '!') && (*(ch+2) == '-') && (*(ch+3) == '-')) {
+        ch&