printf("argv types = [", (int)argc);
printf("argv types = [");
xpctestEcho::PrintArgTypes(void){    GET_CALL_CONTEXT;    if(NS_FAILED(rv) || !cc)        return NS_ERROR_FAILURE;    nsCOMPtr<nsISupports> callee;    if(NS_FAILED(cc->GetCallee(getter_AddRefs(callee))) || callee != this)        return NS_ERROR_FAILURE;    PRUint32 argc;    if(NS_SUCCEEDED(cc->GetArgc(&argc)))        printf("argc = %d  ", (int)argc);    else        return NS_ERROR_FAILURE;    jsval* argv;    if(NS_FAILED(cc->GetArgv(&argv)))        return NS_ERROR_FAILURE;    printf("argv types = [", (int)argc);    for(PRUint32 i = 0; i < argc; i++)    {        const char* type = "<unknown>";        if(JSVAL_IS_OBJECT(argv[i]))        {            if(JSVAL_IS_NULL(argv[i]))                type = "null";            else                type = "object";        }        else if (JSVAL_IS_BOOLEAN(argv[i]))            type = "boolean";        else if (JSVAL_IS_STRING(argv[i]))            type = "string";        else if (JSVAL_IS_DOUBLE(argv[i]))            type = "double";        else if (JSVAL_IS_INT(argv[i]))            type = "int";        else if (JSVAL_IS_VOID(argv[i]))            type = "void";        printf(type);        if(i < argc-1)            printf(", ");    }    printf("]\n");        return NS_OK;}