mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-27 21:00:50 +00:00
jsval can now be a parameter or return type. Got rid of unused variable warnings. Fixed secMan leak.
This commit is contained in:
parent
052759e560
commit
379ded57ab
@ -32,8 +32,7 @@
|
||||
|
||||
static const char *kNPLStr = \
|
||||
"/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n"
|
||||
" *\n"
|
||||
" * The contents of this file are subject to the Netscape Public License\n"
|
||||
" *\n"" * The contents of this file are subject to the Netscape Public License\n"
|
||||
" * Version 1.0 (the \"NPL\"); you may not use this file except in\n"
|
||||
" * compliance with the NPL. You may obtain a copy of the NPL at\n"
|
||||
" * http://www.mozilla.org/NPL/\n"
|
||||
@ -147,6 +146,9 @@ FileGen::GetVariableTypeForMethodLocal(char *aBuffer, IdlVariable &aVariable)
|
||||
case TYPE_FUNC:
|
||||
sprintf(aBuffer, kObjTypeStr, aVariable.GetTypeName());
|
||||
break;
|
||||
case TYPE_JSVAL:
|
||||
strcpy(aBuffer, "jsval");
|
||||
break;
|
||||
default:
|
||||
// XXX Fail for other cases
|
||||
break;
|
||||
@ -193,6 +195,9 @@ FileGen::GetVariableTypeForLocal(char *aBuffer, IdlVariable &aVariable)
|
||||
case TYPE_FUNC:
|
||||
sprintf(aBuffer, kObjTypeStr, aVariable.GetTypeName());
|
||||
break;
|
||||
case TYPE_JSVAL:
|
||||
strcpy(aBuffer, "jsval");
|
||||
break;
|
||||
default:
|
||||
// XXX Fail for other cases
|
||||
break;
|
||||
@ -239,6 +244,9 @@ FileGen::GetVariableTypeForParameter(char *aBuffer, IdlVariable &aVariable)
|
||||
case TYPE_FUNC:
|
||||
sprintf(aBuffer, kObjTypeStr, aVariable.GetTypeName());
|
||||
break;
|
||||
case TYPE_JSVAL:
|
||||
strcpy(aBuffer, "jsval");
|
||||
break;
|
||||
default:
|
||||
// XXX Fail for other cases
|
||||
break;
|
||||
|
@ -481,6 +481,9 @@ IdlVariable* IdlParser::ParseConst(IdlSpecification &aSpecification)
|
||||
case UINT_TOKEN:
|
||||
constObj->SetType(TYPE_UINT);
|
||||
break;
|
||||
case JSVAL_TOKEN:
|
||||
constObj->SetType(TYPE_JSVAL);
|
||||
break;
|
||||
// string type
|
||||
case STRING_TOKEN:
|
||||
constObj->SetType(TYPE_STRING);
|
||||
@ -625,6 +628,9 @@ IdlAttribute* IdlParser::ParseAttribute(IdlSpecification &aSpecification, int aT
|
||||
case UINT_TOKEN:
|
||||
attrObj->SetType(TYPE_UINT);
|
||||
break;
|
||||
case JSVAL_TOKEN:
|
||||
attrObj->SetType(TYPE_JSVAL);
|
||||
break;
|
||||
// string type
|
||||
case STRING_TOKEN:
|
||||
attrObj->SetType(TYPE_STRING);
|
||||
@ -714,6 +720,9 @@ IdlFunction* IdlParser::ParseFunction(IdlSpecification &aSpecification, Token *a
|
||||
case UINT_TOKEN:
|
||||
funcObj->SetReturnValue(TYPE_UINT);
|
||||
break;
|
||||
case JSVAL_TOKEN:
|
||||
funcObj->SetReturnValue(TYPE_JSVAL);
|
||||
break;
|
||||
// string type
|
||||
case STRING_TOKEN:
|
||||
funcObj->SetReturnValue(TYPE_STRING);
|
||||
@ -963,6 +972,9 @@ IdlParameter* IdlParser::ParseFunctionParameter(IdlSpecification &aSpecification
|
||||
case UINT_TOKEN:
|
||||
argObj->SetType(TYPE_UINT);
|
||||
break;
|
||||
case JSVAL_TOKEN:
|
||||
argObj->SetType(TYPE_JSVAL);
|
||||
break;
|
||||
// string type
|
||||
case STRING_TOKEN:
|
||||
argObj->SetType(TYPE_STRING);
|
||||
|
@ -181,6 +181,9 @@ Token* IdlScanner::NextToken()
|
||||
case 'i':
|
||||
IKeywords(mTokenName + 1, mCurrentToken);
|
||||
break;
|
||||
case 'j':
|
||||
JKeywords(mTokenName + 1, mCurrentToken);
|
||||
break;
|
||||
case 'l':
|
||||
LKeywords(mTokenName + 1, mCurrentToken);
|
||||
break;
|
||||
@ -745,6 +748,41 @@ void IdlScanner::IKeywords(char *aCurrentPos, Token *aToken)
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// 'jsval' is the only keyword starting with 'j'.
|
||||
// If that is not it, it must be an identifier
|
||||
//
|
||||
void IdlScanner::JKeywords(char *aCurrentPos, Token *aToken)
|
||||
{
|
||||
int c = mInputFile->get();
|
||||
if (c != EOF && c == 's' && (*aCurrentPos++ = c) && (c = mInputFile->get()) &&
|
||||
c != EOF && c == 'v' && (*aCurrentPos++ = c) && (c = mInputFile->get()) &&
|
||||
c != EOF && c == 'a' && (*aCurrentPos++ = c) && (c = mInputFile->get()) &&
|
||||
c != EOF && c == 'l' && (*aCurrentPos++ = c)) {
|
||||
// if terminated is a keyword
|
||||
c = mInputFile->get();
|
||||
if (c != EOF) {
|
||||
if (isalpha(c) || isdigit(c) || c == '_') {
|
||||
// more characters, it must be an identifier
|
||||
*aCurrentPos++ = c;
|
||||
Identifier(aCurrentPos, aToken);
|
||||
}
|
||||
else {
|
||||
// it is a keyword
|
||||
aToken->SetToken(JSVAL_TOKEN);
|
||||
mInputFile->putback(c);
|
||||
}
|
||||
}
|
||||
else {
|
||||
aToken->SetToken(JSVAL_TOKEN);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// it must be an identifier
|
||||
KeywordMismatch(c, aCurrentPos, aToken);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// 'long' is the only keyword starting with 'l'.
|
||||
// If that is not it, it must be an identifier
|
||||
|
@ -59,6 +59,7 @@ enum EIDLTokenType {
|
||||
INT_TOKEN,
|
||||
UINT_TOKEN,
|
||||
STRING_TOKEN,
|
||||
JSVAL_TOKEN,
|
||||
INPUT_PARAM_TOKEN,
|
||||
OUTPUT_PARAM_TOKEN,
|
||||
INOUT_PARAM_TOKEN,
|
||||
@ -192,6 +193,7 @@ protected:
|
||||
void EKeywords(char *aCurrentPos, Token *aToken);
|
||||
void FKeywords(char *aCurrentPos, Token *aToken);
|
||||
void IKeywords(char *aCurrentPos, Token *aToken);
|
||||
void JKeywords(char *aCurrentPos, Token *aToken);
|
||||
void LKeywords(char *aCurrentPos, Token *aToken);
|
||||
void NKeywords(char *aCurrentPos, Token *aToken);
|
||||
void OKeywords(char *aCurrentPos, Token *aToken);
|
||||
|
@ -134,6 +134,10 @@ void IdlVariable::GetTypeAsString(char *aString, size_t aStringSize)
|
||||
if (aStringSize > 4) {
|
||||
strcpy(aString, "void");
|
||||
}
|
||||
case TYPE_JSVAL:
|
||||
if (aStringSize > 4) {
|
||||
strcpy(aString, "jsval");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -41,6 +41,7 @@ enum Type {
|
||||
TYPE_XPIDL_OBJECT,
|
||||
TYPE_FUNC,
|
||||
TYPE_VOID,
|
||||
TYPE_JSVAL,
|
||||
TYPE_UNKNOWN
|
||||
};
|
||||
|
||||
|
@ -97,9 +97,8 @@ static const char kIncludeDefaultsStr[] = "\n"
|
||||
"#include \"nsIJSScriptObject.h\"\n"
|
||||
"#include \"nsIScriptObjectOwner.h\"\n"
|
||||
"#include \"nsIScriptGlobalObject.h\"\n"
|
||||
#ifdef USE_COMPTR
|
||||
"#include \"nsCOMPtr.h\"\n"
|
||||
#else
|
||||
#ifndef USE_COMPTR
|
||||
"#include \"nsIPtr.h\"\n"
|
||||
#endif
|
||||
"#include \"nsString.h\"\n";
|
||||
@ -316,9 +315,8 @@ static const char kPropFuncBeginStr[] = "\n"
|
||||
static const char kIntCaseStr[] =
|
||||
" if (JSVAL_IS_INT(id)) {\n"
|
||||
" nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);\n"
|
||||
" nsIScriptSecurityManager *secMan;\n"
|
||||
" PRBool ok = PR_FALSE;\n"
|
||||
" if (NS_OK != scriptCX->GetSecurityManager(&secMan)) {\n"
|
||||
" nsCOMPtr<nsIScriptSecurityManager> secMan;\n"
|
||||
" if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {\n"
|
||||
" return JS_FALSE;\n"
|
||||
" }\n"
|
||||
" switch(JSVAL_TO_INT(id)) {\n";
|
||||
@ -327,9 +325,8 @@ static const char kIntCaseNamedItemStr[] =
|
||||
" PRBool checkNamedItem = PR_TRUE;\n"
|
||||
" if (JSVAL_IS_INT(id)) {\n"
|
||||
" nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);\n"
|
||||
" nsIScriptSecurityManager *secMan;\n"
|
||||
" PRBool ok = PR_FALSE;\n"
|
||||
" if (NS_OK != scriptCX->GetSecurityManager(&secMan)) {\n"
|
||||
" nsCOMPtr<nsIScriptSecurityManager> secMan;\n"
|
||||
" if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {\n"
|
||||
" return JS_FALSE;\n"
|
||||
" }\n"
|
||||
" checkNamedItem = PR_FALSE;\n"
|
||||
@ -339,14 +336,12 @@ static const char kPropFuncDefaultStr[] =
|
||||
" default:\n"
|
||||
" return nsJSUtils::nsCallJSScriptObject%sProperty(a, cx, id, vp);\n"
|
||||
" }\n"
|
||||
" NS_RELEASE(secMan);\n"
|
||||
" }\n";
|
||||
|
||||
static const char kPropFuncDefaultNamedItemStr[] =
|
||||
" default:\n"
|
||||
" checkNamedItem = PR_TRUE;\n"
|
||||
" }\n"
|
||||
" NS_RELEASE(secMan);\n"
|
||||
" }\n";
|
||||
|
||||
static const char kPropFuncDefaultItemStr[] =
|
||||
@ -469,6 +464,7 @@ static const char kPropFuncNamedItemNonPrimaryStr[] =
|
||||
static const char kPropCaseBeginStr[] =
|
||||
" case %s_%s:\n"
|
||||
" {\n"
|
||||
" PRBool ok = PR_FALSE;\n"
|
||||
" secMan->CheckScriptAccess(scriptCX, obj, \"%s.%s\", &ok);\n"
|
||||
" if (!ok) {\n"
|
||||
" //Need to throw error here\n"
|
||||
@ -653,6 +649,9 @@ static const char kIntGetCaseStr[] =
|
||||
static const char kBoolGetCaseStr[] =
|
||||
" *vp = BOOLEAN_TO_JSVAL(prop);\n";
|
||||
|
||||
static const char kJSValGetCaseStr[] =
|
||||
" *vp = prop;\n";
|
||||
|
||||
void
|
||||
JSStubGen::GeneratePropGetter(ofstream *file,
|
||||
IdlInterface &aInterface,
|
||||
@ -683,6 +682,9 @@ JSStubGen::GeneratePropGetter(ofstream *file,
|
||||
case TYPE_UINT:
|
||||
case_str = kIntGetCaseStr;
|
||||
break;
|
||||
case TYPE_JSVAL:
|
||||
case_str = kJSValGetCaseStr;
|
||||
break;
|
||||
case TYPE_STRING:
|
||||
case_str = kStringGetCaseStr;
|
||||
break;
|
||||
@ -794,6 +796,9 @@ static const char kBoolSetCaseStr[] =
|
||||
" return JS_FALSE;\n"
|
||||
" }\n";
|
||||
|
||||
static const char kJSValSetCaseStr[] =
|
||||
" prop = *vp;\n";
|
||||
|
||||
void
|
||||
JSStubGen::GeneratePropSetter(ofstream *file,
|
||||
IdlInterface &aInterface,
|
||||
@ -822,6 +827,9 @@ JSStubGen::GeneratePropSetter(ofstream *file,
|
||||
case TYPE_UINT:
|
||||
sprintf(case_buf, kIntSetCaseStr, attr_type);
|
||||
break;
|
||||
case TYPE_JSVAL:
|
||||
strcpy(case_buf, kJSValSetCaseStr);
|
||||
break;
|
||||
case TYPE_STRING:
|
||||
strcpy(case_buf, kStringSetCaseStr);
|
||||
break;
|
||||
@ -977,8 +985,8 @@ static const char kMethodBodyBeginStr[] = "\n"
|
||||
" *rval = JSVAL_NULL;\n"
|
||||
"\n"
|
||||
" nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);\n"
|
||||
" nsIScriptSecurityManager *secMan;\n"
|
||||
" if (NS_OK != scriptCX->GetSecurityManager(&secMan)) {\n"
|
||||
" nsCOMPtr<nsIScriptSecurityManager> secMan;\n"
|
||||
" if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {\n"
|
||||
" return JS_FALSE;\n"
|
||||
" }\n"
|
||||
" {\n"
|
||||
@ -988,7 +996,6 @@ static const char kMethodBodyBeginStr[] = "\n"
|
||||
" //Need to throw error here\n"
|
||||
" return JS_FALSE;\n"
|
||||
" }\n"
|
||||
" NS_RELEASE(secMan);\n"
|
||||
" }\n"
|
||||
"\n"
|
||||
" // If there's no private data, this must be the prototype, so ignore\n"
|
||||
@ -1066,6 +1073,12 @@ static const char kMethodFuncParamStr[] =
|
||||
#define JSGEN_GENERATE_FUNCPARAM(buffer, paramNum, paramType) \
|
||||
sprintf(buffer, kMethodFuncParamStr, paramNum, paramNum)
|
||||
|
||||
static const char kMethodJSValParamStr[] =
|
||||
" b%d = argv[%d];\n";
|
||||
|
||||
#define JSGEN_GENERATE_JSVALPARAM(buffer, paramNum) \
|
||||
sprintf(buffer, kMethodJSValParamStr, paramNum, paramNum)
|
||||
|
||||
static const char kMethodParamListStr[] = "b%d";
|
||||
static const char kMethodParamListDelimiterStr[] = ", ";
|
||||
static const char kMethodParamEllipsisStr[] = "cx, argv+%d, argc-%d";
|
||||
@ -1103,6 +1116,9 @@ static const char kMethodBoolRetStr[] =
|
||||
static const char kMethodVoidRetStr[] =
|
||||
" *rval = JSVAL_VOID;\n";
|
||||
|
||||
static const char kMethodJSValRetStr[] =
|
||||
" *rval = nativeRet;\n";
|
||||
|
||||
static const char kMethodBadParamStr[] =
|
||||
" if (argc < %d) {\n"
|
||||
" JS_ReportError(cx, \"Function %s requires %d parameter%s\");\n"
|
||||
@ -1206,6 +1222,9 @@ JSStubGen::GenerateMethods(IdlSpecification &aSpec)
|
||||
case TYPE_UINT:
|
||||
JSGEN_GENERATE_INTPARAM(buf, p);
|
||||
break;
|
||||
case TYPE_JSVAL:
|
||||
JSGEN_GENERATE_JSVALPARAM(buf, p);
|
||||
break;
|
||||
case TYPE_STRING:
|
||||
JSGEN_GENERATE_STRINGPARAM(buf, p);
|
||||
break;
|
||||
@ -1271,6 +1290,9 @@ JSStubGen::GenerateMethods(IdlSpecification &aSpec)
|
||||
case TYPE_UINT:
|
||||
*file << kMethodIntRetStr;
|
||||
break;
|
||||
case TYPE_JSVAL:
|
||||
*file << kMethodJSValRetStr;
|
||||
break;
|
||||
case TYPE_STRING:
|
||||
*file << kMethodStringRetStr;
|
||||
break;
|
||||
|
@ -78,7 +78,7 @@ static const char *kMethodForwardStr = " NS_IMETHOD %s(%s) { return _to %s(%
|
||||
static const char *kParamStr = "%s a%s";
|
||||
static const char *kCallParamStr = "a%s";
|
||||
static const char *kDelimiterStr = ", ";
|
||||
static const char *kEllipsisParamStr = "JSContext *cx, jsval *argv, PRUint32 argc";
|
||||
static const char *kEllipsisParamStr = "JSContext* cx, jsval* argv, PRUint32 argc";
|
||||
static const char *kEllipsisCallStr = "cx, argv, argc";
|
||||
static const char *kReturnStr = "%s%s aReturn";
|
||||
static const char *kReturnCallStr = "aReturn";
|
||||
|
Loading…
x
Reference in New Issue
Block a user