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