#include "stdafx.h" #include "objparse.h" #include "rmgen.h" using namespace std; bool GetRaw(JSContext* cx, jsval val, JSObject** retObj, int* retType) { if(!JSVAL_IS_OBJECT(val)) return 0; JSObject* obj = JSVAL_TO_OBJECT(val); jsval ret; if(!JS_CallFunctionName(cx, obj, "raw", 0, 0, &ret)) { return false; } if(!JSVAL_IS_OBJECT(ret)) return false; *retObj = JSVAL_TO_OBJECT(ret); if(!JS_IsArrayObject(cx, *retObj)) return false; jsuint len; JS_GetArrayLength(cx, *retObj, &len); if(len==0) return false; jsval rval; JS_GetElement(cx, *retObj, 0, &rval); if(!JSVAL_IS_INT(rval)) return 0; *retType = JSVAL_TO_INT(rval); return true; } bool ParseFields(JSContext* cx, JSObject* array, const char* format, ...) { int len = strlen(format); jsuint arLen; JS_GetArrayLength(cx, array, &arLen); if(arLen != len+1) return false; va_list ap; va_start(ap, format); // start at next arg after format for(int i=0; i