0
* The code generator module for SIP.
0
- * Phil Thompson <phil@river-bank.demon.co.uk>
0
+ * Copyright (c) 2008 Riverbank Computing Limited <info@riverbankcomputing.com>
0
* This file is part of SIP.
0
#define TYPE_FLAGS_MASK 0x0f00
0
-/* Control what generate
SingleArg() actually generates. */
0
+/* Control what generate
CalledArgs() actually generates. */
0
@@ -106,10 +104,11 @@ static void generateShadowClassDeclaration(sipSpec *, classDef *, FILE *);
0
static int hasConvertToCode(argDef *ad);
0
static void deleteTemps(signatureDef *sd, FILE *fp);
0
static void gc_ellipsis(signatureDef *sd, FILE *fp);
0
-static void generateArgs(classDef *, signatureDef *, funcArgType, FILE *);
0
+static void generateCallArgs(classDef *, signatureDef *, signatureDef *,
0
+static void generateCalledArgs(classDef *, signatureDef *, funcArgType, FILE *);
0
static void generateVariable(classDef *, argDef *, int, FILE *);
0
static void generateNamedValueType(classDef *, argDef *, char *, FILE *);
0
-static void generateSingleArg(classDef *, argDef *, int, funcArgType, FILE *);
0
static void generateBaseType(classDef *, argDef *, FILE *);
0
static void generateNamedBaseType(classDef *, argDef *, char *, FILE *);
0
static void generateTupleBuilder(signatureDef *, FILE *);
0
@@ -125,7 +124,7 @@ static void generateProtectedDeclarations(classDef *, FILE *);
0
static void generateProtectedDefinitions(classDef *, FILE *);
0
static void generateProtectedCallArgs(overDef *od, FILE *fp);
0
static void generateConstructorCall(classDef *, ctorDef *, int, FILE *);
0
-static void generateHandleResult(overDef *, int,
char *, FILE *);
0
+static void generateHandleResult(overDef *, int,
int, char *, FILE *);
0
static void generateOrdinaryFunction(moduleDef *mod, classDef *cd,
0
memberDef *md, FILE *fp);
0
static void generateSimpleFunctionCall(fcallDef *, FILE *);
0
@@ -603,6 +602,16 @@ static void generateInternalAPIHeader(sipSpec *pt, moduleDef *mod,
0
"#define sipString_AsChar sipAPI_%s->api_string_as_char\n"
0
"#define sipUnicode_AsWChar sipAPI_%s->api_unicode_as_wchar\n"
0
"#define sipUnicode_AsWString sipAPI_%s->api_unicode_as_wstring\n"
0
+"#define sipConvertFromConstVoidPtr sipAPI_%s->api_convert_from_const_void_ptr\n"
0
+"#define sipConvertFromVoidPtrAndSize sipAPI_%s->api_convert_from_void_ptr_and_size\n"
0
+"#define sipConvertFromConstVoidPtrAndSize sipAPI_%s->api_convert_from_const_void_ptr_and_size\n"
0
+"#define sipInvokeSlot sipAPI_%s->api_invoke_slot\n"
0
+"#define sipParseType sipAPI_%s->api_parse_type\n"
0
@@ -1820,9 +1829,14 @@ static void generateCpp(sipSpec *pt, moduleDef *mod, const char *codeDir,
0
for (md = mod->othfuncs; md != NULL; md = md->next)
0
if (md->slot == no_slot)
0
+" {%N, (PyCFunction)func_%s, METH_KEYWORDS, NULL},\n"
0
+ , md->pyname, md->pyname->text);
0
" {%N, func_%s, METH_VARARGS, NULL},\n"
0
-
, md->pyname, md->pyname->text);
0
+
, md->pyname, md->pyname->text);
0
@@ -2138,12 +2152,13 @@ static void generateEncodedClass(moduleDef *mod, classDef *cd, int last,
0
- * Generate an ordinary function
(ie. not a class method).
0
+ * Generate an ordinary function
.
0
static void generateOrdinaryFunction(moduleDef *mod, classDef *cd,
0
memberDef *md, FILE *fp)
0
@@ -2165,39 +2180,73 @@ static void generateOrdinaryFunction(moduleDef *mod, classDef *cd,
0
+ const char *self = (generating_c ? "sipSelf" : "");
0
+"extern \"C\" {static PyObject *func_%s(PyObject *,PyObject *,PyObject *);}\n"
0
"extern \"C\" {static PyObject *func_%s(PyObject *,PyObject *);}\n"
0
+"static PyObject *func_%s(PyObject *%s,PyObject *sipArgs,PyObject *sipKwds)\n"
0
+ , md->pyname->text, self);
0
"static PyObject *func_%s(PyObject *%s,PyObject *sipArgs)\n"
0
-
,md->pyname->text,(generating_c ? "sipSelf" : ""));
0
+
, md->pyname->text, self);
0
-" int sipArgsParsed = 0;\n"