/* Theoretic - Graph Theoretic Byte Code Engineering * Copyright (C) 2001-2002 Jay Freeman (saurik) */ /* * Redistribution and use in source and binary * forms, with or without modification, are permitted * provided that the following conditions are met: * * 1. Redistributions of source code must retain the * above copyright notice, this list of conditions * and the following disclaimer. * 2. Redistributions in binary form must reproduce the * above copyright notice, this list of conditions * and the following disclaimer in the documentation * and/or other materials provided with the * distribution. * 3. The name of the author may not be used to endorse * or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "stdafx.h" #include "theoretic/VProcessor.h" namespace Theoretic { VProcessor::VProcessor(const std::wstring &path) { process.initXPath(xpath, XalanDOMString(path.c_str()), resolver); expr = &xpath.getExpression(); } VProcessor::~VProcessor() { } VObjectPtr VProcessor::Step(VContext &context, int pos) { XPathExpression::OpCodeMapValueType code; code = expr->m_opMap[pos]; switch (code) { case XPathExpression::eFROM_CHILDREN: { int length = GetArgLen(pos); //OpTester tester(context, pos + 3, length); } break; default: throw VPathNotImplementedException(); break; } return new VString(L"dude"); } VObjectPtr VProcessor::Execute(VContext &context, int pos) { XPathExpression::OpCodeMapValueType code; code = expr->m_opMap[pos]; switch (code) { case XPathExpression::eOP_XPATH: Execute(context, pos + 2); break; case XPathExpression::eOP_AND: break; case XPathExpression::eOP_NOTEQUALS: Execute(context, pos + 2); break; case XPathExpression::eOP_VARIABLE: { const XObject &name = expr->m_tokenQueue[expr->m_opMap[pos + 3]]; return context[name.str().c_str()]; } break; case XPathExpression::eOP_NUMBERLIT: { const XToken &literal = expr->m_tokenQueue[expr->m_opMap[pos + 3]]; return new VNumber(literal.num()); } break; case XPathExpression::eOP_LOCATIONPATH: { Step(context, pos + 2); } break; default: throw VPathNotImplementedException(); break; } return new VString(L"dude"); } int VProcessor::GetArgLen(int pos) { return expr->m_opMap[pos + XPathExpression::s_opCodeMapLengthIndex + 1] - 3; } }