DBGCOps.cpp revision a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fc
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * DBGC - Debugger Console, Operators.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Copyright (C) 2006-2007 innotek GmbH
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * innotek GmbH confidential
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * All rights reserved
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/*******************************************************************************
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync* Header Files *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync*******************************************************************************/
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/*******************************************************************************
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync* Internal Functions *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync*******************************************************************************/
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpMinus(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpPluss(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpBooleanNot(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpBitwiseNot(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpVar(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpAddrFar(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpMult(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpDiv(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpMod(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpAdd(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpSub(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpBitwiseShiftLeft(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpBitwiseShiftRight(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpBitwiseAnd(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpBitwiseXor(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpBitwiseOr(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpBooleanAnd(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpBooleanOr(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpRangeLength(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpRangeLengthBytes(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstatic DECLCALLBACK(int) dbgcOpRangeTo(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/*******************************************************************************
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync* Global Variables *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync*******************************************************************************/
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/** Operators. */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /* szName is initialized as a 4 char array because of M$C elsewise optimizing it away in /Ox mode (the 'const char' vs 'char' problem). */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /* szName, cchName, fBinary, iPrecedence, pfnHandlerUnary, pfnHandlerBitwise */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync { {'-'}, 1, false, 1, dbgcOpMinus, NULL, "Unary minus." },
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync { {'+'}, 1, false, 1, dbgcOpPluss, NULL, "Unary pluss." },
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync { {'!'}, 1, false, 1, dbgcOpBooleanNot, NULL, "Boolean not." },
case DBGCVAR_TYPE_GC_FLAT:
case DBGCVAR_TYPE_GC_FAR:
case DBGCVAR_TYPE_GC_PHYS:
case DBGCVAR_TYPE_HC_FLAT:
case DBGCVAR_TYPE_HC_FAR:
case DBGCVAR_TYPE_HC_PHYS:
case DBGCVAR_TYPE_NUMBER:
case DBGCVAR_TYPE_UNKNOWN:
case DBGCVAR_TYPE_STRING:
return VERR_PARSE_INCORRECT_ARG_TYPE;
case DBGCVAR_TYPE_GC_FLAT:
case DBGCVAR_TYPE_GC_FAR:
case DBGCVAR_TYPE_GC_PHYS:
case DBGCVAR_TYPE_HC_FLAT:
case DBGCVAR_TYPE_HC_FAR:
case DBGCVAR_TYPE_HC_PHYS:
case DBGCVAR_TYPE_NUMBER:
case DBGCVAR_TYPE_UNKNOWN:
case DBGCVAR_TYPE_STRING:
return VERR_PARSE_INCORRECT_ARG_TYPE;
case DBGCVAR_TYPE_GC_FLAT:
case DBGCVAR_TYPE_GC_FAR:
case DBGCVAR_TYPE_GC_PHYS:
case DBGCVAR_TYPE_HC_FLAT:
case DBGCVAR_TYPE_HC_FAR:
case DBGCVAR_TYPE_HC_PHYS:
case DBGCVAR_TYPE_NUMBER:
case DBGCVAR_TYPE_STRING:
case DBGCVAR_TYPE_UNKNOWN:
return VERR_PARSE_INCORRECT_ARG_TYPE;
case DBGCVAR_TYPE_GC_FLAT:
case DBGCVAR_TYPE_GC_FAR:
case DBGCVAR_TYPE_GC_PHYS:
case DBGCVAR_TYPE_HC_FLAT:
case DBGCVAR_TYPE_HC_FAR:
case DBGCVAR_TYPE_HC_PHYS:
case DBGCVAR_TYPE_NUMBER:
case DBGCVAR_TYPE_UNKNOWN:
case DBGCVAR_TYPE_STRING:
return VERR_PARSE_INCORRECT_ARG_TYPE;
return VERR_PARSE_INCORRECT_ARG_TYPE;
return VERR_PARSE_VARIABLE_NOT_FOUND;
int rc;
case DBGCVAR_TYPE_GC_FLAT:
return VINF_SUCCESS;
case DBGCVAR_TYPE_GC_FAR:
return VINF_SUCCESS;
return VERR_PARSE_CONVERSION_FAILED;
case DBGCVAR_TYPE_GC_PHYS:
//rc = MMR3PhysGCPhys2GCVirtEx(pDbgc->pVM, pResult->u.GCPhys, ..., &pResult->u.GCFlat); - yea, sure.
return VERR_PARSE_INCORRECT_ARG_TYPE;
case DBGCVAR_TYPE_HC_FLAT:
return VINF_SUCCESS;
case DBGCVAR_TYPE_HC_FAR:
return VERR_PARSE_INCORRECT_ARG_TYPE;
case DBGCVAR_TYPE_HC_PHYS:
return VINF_SUCCESS;
return VERR_PARSE_CONVERSION_FAILED;
case DBGCVAR_TYPE_NUMBER:
return VINF_SUCCESS;
case DBGCVAR_TYPE_STRING:
case DBGCVAR_TYPE_UNKNOWN:
return VERR_PARSE_INCORRECT_ARG_TYPE;
int rc;
case DBGCVAR_TYPE_GC_FLAT:
return VERR_PARSE_CONVERSION_FAILED;
case DBGCVAR_TYPE_GC_FAR:
return VERR_PARSE_CONVERSION_FAILED;
case DBGCVAR_TYPE_GC_PHYS:
case DBGCVAR_TYPE_HC_FLAT:
return VERR_PARSE_CONVERSION_FAILED;
case DBGCVAR_TYPE_HC_FAR:
return VERR_PARSE_INCORRECT_ARG_TYPE;
case DBGCVAR_TYPE_HC_PHYS:
case DBGCVAR_TYPE_NUMBER:
case DBGCVAR_TYPE_STRING:
case DBGCVAR_TYPE_UNKNOWN:
return VERR_PARSE_INCORRECT_ARG_TYPE;
int rc;
case DBGCVAR_TYPE_GC_FLAT:
return VERR_PARSE_CONVERSION_FAILED;
case DBGCVAR_TYPE_GC_FAR:
return VERR_PARSE_CONVERSION_FAILED;
case DBGCVAR_TYPE_GC_PHYS:
return VERR_PARSE_CONVERSION_FAILED;
case DBGCVAR_TYPE_HC_FLAT:
return VERR_PARSE_CONVERSION_FAILED;
case DBGCVAR_TYPE_HC_FAR:
return VERR_PARSE_INCORRECT_ARG_TYPE;
case DBGCVAR_TYPE_HC_PHYS:
case DBGCVAR_TYPE_NUMBER:
case DBGCVAR_TYPE_STRING:
case DBGCVAR_TYPE_UNKNOWN:
return VERR_PARSE_INCORRECT_ARG_TYPE;
int rc;
case DBGCVAR_TYPE_GC_FLAT:
return VERR_PARSE_CONVERSION_FAILED;
case DBGCVAR_TYPE_GC_FAR:
return VERR_PARSE_CONVERSION_FAILED;
case DBGCVAR_TYPE_GC_PHYS:
return VERR_PARSE_CONVERSION_FAILED;
case DBGCVAR_TYPE_HC_FLAT:
case DBGCVAR_TYPE_HC_FAR:
case DBGCVAR_TYPE_HC_PHYS:
return VERR_PARSE_CONVERSION_FAILED;
case DBGCVAR_TYPE_NUMBER:
case DBGCVAR_TYPE_STRING:
case DBGCVAR_TYPE_UNKNOWN:
return VERR_PARSE_INCORRECT_ARG_TYPE;
static DECLCALLBACK(int) dbgcOpAddrFar(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult)
int rc;
case DBGCVAR_TYPE_STRING:
return rc;
case DBGCVAR_TYPE_NUMBER:
case DBGCVAR_TYPE_GC_FLAT:
case DBGCVAR_TYPE_GC_FAR:
case DBGCVAR_TYPE_GC_PHYS:
case DBGCVAR_TYPE_HC_FLAT:
case DBGCVAR_TYPE_HC_FAR:
case DBGCVAR_TYPE_HC_PHYS:
case DBGCVAR_TYPE_UNKNOWN:
return VERR_PARSE_INCORRECT_ARG_TYPE;
case DBGCVAR_TYPE_GC_FLAT:
case DBGCVAR_TYPE_HC_FLAT:
case DBGCVAR_TYPE_NUMBER:
case DBGCVAR_TYPE_STRING:
return rc;
case DBGCVAR_TYPE_GC_FAR:
case DBGCVAR_TYPE_GC_PHYS:
case DBGCVAR_TYPE_HC_FAR:
case DBGCVAR_TYPE_HC_PHYS:
case DBGCVAR_TYPE_UNKNOWN:
return VERR_PARSE_INCORRECT_ARG_TYPE;
static DECLCALLBACK(int) dbgcOpMult(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult)
int rc;
return rc;
return VERR_PARSE_INCORRECT_ARG_TYPE;
return rc;
case DBGCVAR_TYPE_HC_FLAT:
return VERR_PARSE_INCORRECT_ARG_TYPE;
return rc;
return rc;
int rc;
case DBGCVAR_TYPE_GC_FLAT:
case DBGCVAR_TYPE_HC_FLAT:
case DBGCVAR_TYPE_HC_FAR:
case DBGCVAR_TYPE_HC_PHYS:
return VERR_PARSE_INVALID_OPERATION;
return rc;
case DBGCVAR_TYPE_GC_FAR:
case DBGCVAR_TYPE_HC_FLAT:
case DBGCVAR_TYPE_HC_FAR:
case DBGCVAR_TYPE_HC_PHYS:
return VERR_PARSE_INVALID_OPERATION;
case DBGCVAR_TYPE_NUMBER:
return rc;
return rc;
case DBGCVAR_TYPE_GC_PHYS:
case DBGCVAR_TYPE_HC_FLAT:
case DBGCVAR_TYPE_HC_FAR:
case DBGCVAR_TYPE_HC_PHYS:
return VERR_PARSE_INVALID_OPERATION;
return rc;
return VERR_PARSE_INVALID_OPERATION;
case DBGCVAR_TYPE_HC_FLAT:
return rc;
return rc;
case DBGCVAR_TYPE_HC_FAR:
case DBGCVAR_TYPE_NUMBER:
return rc;
return rc;
return rc;
case DBGCVAR_TYPE_HC_PHYS:
return rc;
case DBGCVAR_TYPE_NUMBER:
case DBGCVAR_TYPE_SYMBOL:
case DBGCVAR_TYPE_STRING:
return rc;
case DBGCVAR_TYPE_NUMBER:
return VERR_PARSE_INVALID_OPERATION;
return VERR_PARSE_INVALID_OPERATION;
return rc;
case DBGCVAR_TYPE_NUMBER:
case DBGCVAR_TYPE_GC_FLAT:
case DBGCVAR_TYPE_GC_PHYS:
case DBGCVAR_TYPE_HC_FLAT:
case DBGCVAR_TYPE_HC_PHYS:
case DBGCVAR_TYPE_GC_FAR:
case DBGCVAR_TYPE_HC_FAR:
case DBGCVAR_TYPE_STRING:
return rc;
case DBGCVAR_TYPE_GC_FAR:
case DBGCVAR_TYPE_GC_FLAT:
case DBGCVAR_TYPE_GC_PHYS:
case DBGCVAR_TYPE_HC_FAR:
case DBGCVAR_TYPE_HC_FLAT:
case DBGCVAR_TYPE_HC_PHYS:
case DBGCVAR_TYPE_NUMBER:
case DBGCVAR_TYPE_STRING:
if (pOp)
return rc;
int rc;
case DBGCVAR_TYPE_GC_FLAT:
case DBGCVAR_TYPE_HC_FLAT:
case DBGCVAR_TYPE_HC_FAR:
case DBGCVAR_TYPE_HC_PHYS:
return VERR_PARSE_INVALID_OPERATION;
return rc;
case DBGCVAR_TYPE_GC_FAR:
case DBGCVAR_TYPE_HC_FLAT:
case DBGCVAR_TYPE_HC_FAR:
case DBGCVAR_TYPE_HC_PHYS:
return VERR_PARSE_INVALID_OPERATION;
case DBGCVAR_TYPE_NUMBER:
return rc;
return rc;
case DBGCVAR_TYPE_GC_PHYS:
case DBGCVAR_TYPE_HC_FLAT:
case DBGCVAR_TYPE_HC_FAR:
case DBGCVAR_TYPE_HC_PHYS:
return VERR_PARSE_INVALID_OPERATION;
return rc;
return VERR_PARSE_INVALID_OPERATION;
case DBGCVAR_TYPE_HC_FLAT:
return rc;
return rc;
case DBGCVAR_TYPE_HC_FAR:
case DBGCVAR_TYPE_NUMBER:
return rc;
return rc;
return rc;
case DBGCVAR_TYPE_HC_PHYS:
return rc;
case DBGCVAR_TYPE_NUMBER:
case DBGCVAR_TYPE_SYMBOL:
case DBGCVAR_TYPE_STRING:
return rc;
case DBGCVAR_TYPE_NUMBER:
return VERR_PARSE_INVALID_OPERATION;
return VERR_PARSE_INVALID_OPERATION;
static DECLCALLBACK(int) dbgcOpBitwiseShiftLeft(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult)
static DECLCALLBACK(int) dbgcOpBitwiseShiftRight(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult)
static DECLCALLBACK(int) dbgcOpBitwiseAnd(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult)
static DECLCALLBACK(int) dbgcOpBitwiseXor(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult)
static DECLCALLBACK(int) dbgcOpBitwiseOr(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult)
static DECLCALLBACK(int) dbgcOpBooleanAnd(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult)
static DECLCALLBACK(int) dbgcOpBooleanOr(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult)
static DECLCALLBACK(int) dbgcOpRangeLength(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult)
return rc;
case DBGCVAR_TYPE_NUMBER:
case DBGCVAR_TYPE_STRING:
return rc;
return VERR_PARSE_INVALID_OPERATION;
return VINF_SUCCESS;
static DECLCALLBACK(int) dbgcOpRangeLengthBytes(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult)
return rc;
static DECLCALLBACK(int) dbgcOpRangeTo(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult)
return rc;
case DBGCVAR_TYPE_GC_FLAT:
case DBGCVAR_TYPE_GC_PHYS:
case DBGCVAR_TYPE_HC_FLAT:
case DBGCVAR_TYPE_HC_PHYS:
case DBGCVAR_TYPE_NUMBER:
case DBGCVAR_TYPE_GC_FAR:
case DBGCVAR_TYPE_STRING:
case DBGCVAR_TYPE_HC_FAR:
return VERR_PARSE_INVALID_OPERATION;
if (pOp)
return pOp;