*** empty log message ***
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@421 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
494d88aa06
commit
0dced3617d
1 changed files with 89 additions and 25 deletions
|
|
@ -1,12 +1,37 @@
|
||||||
/* Test module */
|
/* -----------------------------------------------------------------------------
|
||||||
|
* test.c
|
||||||
|
*
|
||||||
|
* This module implements a SWIG module in the new tag-based parser.
|
||||||
|
* This is work in progress.
|
||||||
|
* ----------------------------------------------------------------------------- */
|
||||||
|
|
||||||
#include "swig.h"
|
#include "swig.h"
|
||||||
|
|
||||||
|
/* -------- Module variables ------- */
|
||||||
|
|
||||||
|
#define CPLUS_PUBLIC 1
|
||||||
|
#define CPLUS_PRIVATE 2
|
||||||
|
#define CPLUS_PROTECTED 3
|
||||||
|
|
||||||
|
static DOHFile *headers = 0;
|
||||||
|
static DOHFile *wrappers = 0;
|
||||||
|
static DOHFile *init = 0;
|
||||||
|
|
||||||
|
static int ExternMode = 0;
|
||||||
|
static int ImportMode = 0;
|
||||||
|
static int ReadOnly = 0;
|
||||||
|
static int CPlusMode = CPLUS_PUBLIC;
|
||||||
|
static int NewMode = 0;
|
||||||
|
static DOHString *ModuleName = 0;
|
||||||
|
static int NativeMode = 0;
|
||||||
|
static DOHString *NewName = 0;
|
||||||
|
static DOHHash *RenameHash = 0;
|
||||||
|
|
||||||
/* -------- File inclusion directions -------- */
|
/* -------- File inclusion directions -------- */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
emit_includefile(DOH *obj, void *clientdata) {
|
emit_includefile(DOH *obj, void *clientdata) {
|
||||||
DOH *c;
|
DOH *c;
|
||||||
printf("includefile\n");
|
|
||||||
c = Getattr(obj,"child");
|
c = Getattr(obj,"child");
|
||||||
if (c) {
|
if (c) {
|
||||||
Swig_emit(c,clientdata);
|
Swig_emit(c,clientdata);
|
||||||
|
|
@ -16,27 +41,32 @@ emit_includefile(DOH *obj, void *clientdata) {
|
||||||
static int
|
static int
|
||||||
emit_externfile(DOH *obj, void *clientdata) {
|
emit_externfile(DOH *obj, void *clientdata) {
|
||||||
DOH *c;
|
DOH *c;
|
||||||
printf("externfile\n");
|
int oldem = ExternMode;
|
||||||
|
ExternMode = 1;
|
||||||
c = Getattr(obj,"child");
|
c = Getattr(obj,"child");
|
||||||
if (c) {
|
if (c) {
|
||||||
Swig_emit(c,clientdata);
|
Swig_emit(c,clientdata);
|
||||||
}
|
}
|
||||||
|
ExternMode = oldem;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
emit_importfile(DOH *obj, void *clientdata) {
|
emit_importfile(DOH *obj, void *clientdata) {
|
||||||
DOH *c;
|
DOH *c;
|
||||||
printf("importfile\n");
|
int oldem = ExternMode;
|
||||||
|
ExternMode = 1;
|
||||||
|
ImportMode = 1;
|
||||||
c = Getattr(obj,"child");
|
c = Getattr(obj,"child");
|
||||||
if (c) {
|
if (c) {
|
||||||
Swig_emit(c,clientdata);
|
Swig_emit(c,clientdata);
|
||||||
}
|
}
|
||||||
|
ExternMode = oldem;
|
||||||
|
ImportMode = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
emit_scope(DOH *obj, void *clientdata) {
|
emit_scope(DOH *obj, void *clientdata) {
|
||||||
DOH *c;
|
DOH *c;
|
||||||
Printf(stdout,"scope\n");
|
|
||||||
c = Getattr(obj,"child");
|
c = Getattr(obj,"child");
|
||||||
if (c) {
|
if (c) {
|
||||||
Swig_emit(c,clientdata);
|
Swig_emit(c,clientdata);
|
||||||
|
|
@ -45,23 +75,22 @@ emit_scope(DOH *obj, void *clientdata) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Code blocks */
|
/* -------- Code blocks -------- */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
emit_headerblock(DOH *obj, void *clientdata) {
|
emit_headerblock(DOH *obj, void *clientdata) {
|
||||||
Printf(stdout,"headerblock\n");
|
Dump(Getattr(obj,"code"),headers);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
emit_wrapperblock(DOH *obj, void *clientdata) {
|
emit_wrapperblock(DOH *obj, void *clientdata) {
|
||||||
Printf(stdout,"wrapperblock\n");
|
Dump(Getattr(obj,"code"),wrappers);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
emit_initblock(DOH *obj, void *clientdata) {
|
emit_initblock(DOH *obj, void *clientdata) {
|
||||||
Printf(stdout,"initblock\n");
|
Dump(Getattr(obj,"code"),init);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -135,19 +164,19 @@ emit_classdecl(DOH *obj, void *clientdata) {
|
||||||
|
|
||||||
static int
|
static int
|
||||||
emit_private(DOH *obj, void *clientdata) {
|
emit_private(DOH *obj, void *clientdata) {
|
||||||
Printf(stdout,"private\n");
|
CPlusMode = CPLUS_PRIVATE;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
emit_protected(DOH *obj, void *clientdata) {
|
emit_protected(DOH *obj, void *clientdata) {
|
||||||
Printf(stdout,"protected\n");
|
CPlusMode = CPLUS_PROTECTED;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
emit_public(DOH *obj, void *clientdata) {
|
emit_public(DOH *obj, void *clientdata) {
|
||||||
Printf(stdout,"public\n");
|
CPlusMode = CPLUS_PUBLIC;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -166,37 +195,46 @@ emit_addmethods(DOH *obj, void *clientdata) {
|
||||||
|
|
||||||
static int
|
static int
|
||||||
emit_moduledirective(DOH *obj, void *clientdata) {
|
emit_moduledirective(DOH *obj, void *clientdata) {
|
||||||
Printf(stdout,"moduledirective : %s\n", Getattr(obj,"name"));
|
if (!ModuleName) {
|
||||||
|
ModuleName = Getattr(obj,"name");
|
||||||
|
Incref(ModuleName);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
emit_renamedirective(DOH *obj, void *clientdata) {
|
emit_renamedirective(DOH *obj, void *clientdata) {
|
||||||
Printf(stdout,"renamedirective\n");
|
DOHString *name, *rename;
|
||||||
|
name = Getattr(obj,"oldname");
|
||||||
|
rename = Getattr(obj,"newname");
|
||||||
|
if (name && rename)
|
||||||
|
Setattr(RenameHash,name,rename);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
emit_readonlydirective(DOH *obj, void *clientdata) {
|
emit_readonlydirective(DOH *obj, void *clientdata) {
|
||||||
Printf(stdout,"readonlydirective\n");
|
ReadOnly = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
emit_readwritedirective(DOH *obj, void *clientdata) {
|
emit_readwritedirective(DOH *obj, void *clientdata) {
|
||||||
Printf(stdout,"readwritedirective\n");
|
ReadOnly = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
emit_namedirective(DOH *obj, void *clientdata) {
|
emit_namedirective(DOH *obj, void *clientdata) {
|
||||||
Printf(stdout,"namedirective\n");
|
if (NewName) Delete(NewName);
|
||||||
|
NewName = Getattr(obj,"name");
|
||||||
|
if (NewName) Incref(NewName);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
emit_newdirective(DOH *obj, void *clientdata) {
|
emit_newdirective(DOH *obj, void *clientdata) {
|
||||||
Printf(stdout,"newdirective\n");
|
NewMode = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -214,7 +252,14 @@ emit_pragmadirective(DOH *obj, void *clientdata) {
|
||||||
|
|
||||||
static int
|
static int
|
||||||
emit_nativedirective(DOH *obj, void *clientdata) {
|
emit_nativedirective(DOH *obj, void *clientdata) {
|
||||||
Printf(stdout,"nativedirective\n");
|
DOH *c;
|
||||||
|
int oldnative = NativeMode;
|
||||||
|
NativeMode = 1;
|
||||||
|
c = Getattr(obj, "child");
|
||||||
|
if (c) {
|
||||||
|
Swig_emit(c,clientdata);
|
||||||
|
}
|
||||||
|
NativeMode = oldnative;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -242,16 +287,34 @@ emit_cleardirective(DOH *obj, void *clientdata) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Entry point */
|
/* -------- Entry point -------- */
|
||||||
|
|
||||||
void test_emit(DOH *top, void *clientdata) {
|
void test_emit(DOH *top, void *clientdata) {
|
||||||
|
|
||||||
|
/* Initialization */
|
||||||
|
|
||||||
|
headers = NewString("\n/* --- Headers --- */\n");
|
||||||
|
wrappers = NewString("\n/* --- Wrappers --- */\n");
|
||||||
|
init = NewString("\n/* --- Initialization --- */\n");
|
||||||
|
|
||||||
|
RenameHash = NewHash();
|
||||||
|
|
||||||
Swig_emit(top, clientdata);
|
Swig_emit(top, clientdata);
|
||||||
|
|
||||||
|
Swig_banner(stdout);
|
||||||
|
Dump(headers,stdout);
|
||||||
|
Dump(wrappers,stdout);
|
||||||
|
Dump(init, stdout);
|
||||||
|
Delete(headers);
|
||||||
|
Delete(wrappers);
|
||||||
|
Delete(init);
|
||||||
|
Delete(RenameHash);
|
||||||
}
|
}
|
||||||
|
|
||||||
static SwigRule rules[] = {
|
static SwigRule rules[] = {
|
||||||
"includefile", emit_includefile,
|
"includefile", emit_includefile,
|
||||||
"externfile", emit_externfile,
|
"externfile", emit_externfile,
|
||||||
"importfile", emit_importfile,
|
"importfile", emit_importfile,
|
||||||
|
|
||||||
"headerblock", emit_headerblock,
|
"headerblock", emit_headerblock,
|
||||||
"wrapperblock", emit_wrapperblock,
|
"wrapperblock", emit_wrapperblock,
|
||||||
"initblock", emit_initblock,
|
"initblock", emit_initblock,
|
||||||
|
|
@ -260,7 +323,6 @@ static SwigRule rules[] = {
|
||||||
"variable", emit_variable,
|
"variable", emit_variable,
|
||||||
"constant", emit_constant,
|
"constant", emit_constant,
|
||||||
"typedef", emit_typedef,
|
"typedef", emit_typedef,
|
||||||
|
|
||||||
"class", emit_class,
|
"class", emit_class,
|
||||||
"destructor", emit_destructor,
|
"destructor", emit_destructor,
|
||||||
"enum", emit_enum,
|
"enum", emit_enum,
|
||||||
|
|
@ -270,7 +332,6 @@ static SwigRule rules[] = {
|
||||||
"protected", emit_protected,
|
"protected", emit_protected,
|
||||||
"public", emit_public,
|
"public", emit_public,
|
||||||
"addmethods", emit_addmethods,
|
"addmethods", emit_addmethods,
|
||||||
|
|
||||||
"moduledirective", emit_moduledirective,
|
"moduledirective", emit_moduledirective,
|
||||||
"renamedirective", emit_renamedirective,
|
"renamedirective", emit_renamedirective,
|
||||||
"readonlydirective", emit_readonlydirective,
|
"readonlydirective", emit_readonlydirective,
|
||||||
|
|
@ -284,7 +345,6 @@ static SwigRule rules[] = {
|
||||||
"typemapcopy", emit_typemapcopy,
|
"typemapcopy", emit_typemapcopy,
|
||||||
"applydirective", emit_applydirective,
|
"applydirective", emit_applydirective,
|
||||||
"cleardirective", emit_cleardirective,
|
"cleardirective", emit_cleardirective,
|
||||||
|
|
||||||
NULL, NULL
|
NULL, NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -292,3 +352,7 @@ static SwigRule rules[] = {
|
||||||
void test_init() {
|
void test_init() {
|
||||||
Swig_add_rules(rules);
|
Swig_add_rules(rules);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue