18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2006, 2008, 2009 Apple Inc. All rights reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version.
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful,
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB.  If not, write to
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA.
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSTreeWalker.h"
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSNode.h"
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Node.h"
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "NodeFilter.h"
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "TreeWalker.h"
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace JSC;
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid JSTreeWalker::markChildren(MarkStack& markStack)
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Base::markChildren(markStack);
350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (NodeFilter* filter = m_impl->filter())
370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        filter->markAggregate(markStack);
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
405f1ab04193ad0130ca8204aadaceae083aca9881Feng QianJSValue JSTreeWalker::parentNode(ExecState* exec, const ArgList&)
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Node* node = impl()->parentNode(exec);
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (exec->hadException())
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return jsUndefined();
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return toJS(exec, node);
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
485f1ab04193ad0130ca8204aadaceae083aca9881Feng QianJSValue JSTreeWalker::firstChild(ExecState* exec, const ArgList&)
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Node* node = impl()->firstChild(exec);
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (exec->hadException())
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return jsUndefined();
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return toJS(exec, node);
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
565f1ab04193ad0130ca8204aadaceae083aca9881Feng QianJSValue JSTreeWalker::lastChild(ExecState* exec, const ArgList&)
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Node* node = impl()->lastChild(exec);
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (exec->hadException())
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return jsUndefined();
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return toJS(exec, node);
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
645f1ab04193ad0130ca8204aadaceae083aca9881Feng QianJSValue JSTreeWalker::nextSibling(ExecState* exec, const ArgList&)
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Node* node = impl()->nextSibling(exec);
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (exec->hadException())
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return jsUndefined();
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return toJS(exec, node);
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
725f1ab04193ad0130ca8204aadaceae083aca9881Feng QianJSValue JSTreeWalker::previousSibling(ExecState* exec, const ArgList&)
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Node* node = impl()->previousSibling(exec);
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (exec->hadException())
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return jsUndefined();
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return toJS(exec, node);
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
805f1ab04193ad0130ca8204aadaceae083aca9881Feng QianJSValue JSTreeWalker::previousNode(ExecState* exec, const ArgList&)
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Node* node = impl()->previousNode(exec);
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (exec->hadException())
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return jsUndefined();
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return toJS(exec, node);
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
885f1ab04193ad0130ca8204aadaceae083aca9881Feng QianJSValue JSTreeWalker::nextNode(ExecState* exec, const ArgList&)
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Node* node = impl()->nextNode(exec);
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (exec->hadException())
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return jsUndefined();
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return toJS(exec, node);
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
97