unoidl2

Unnamed repository; edit this file to name it for gitweb.
git clone https://logand.com/git/unoidl2.git/
Log | Files | Refs

commit f8d200b395d8a00728b50d64242fc8f26f8df00a
parent 16aa13df0ef2328cc56b5e787d254183230c02e7
Author: Tomas Hlavaty <tom@logand.com>
Date:   Mon, 16 Jan 2012 20:59:23 +0100

more typeinfo improvements

Diffstat:
Munoidl2java.c | 42+++++++++++++++++++++++++++---------------
1 file changed, 27 insertions(+), 15 deletions(-)

diff --git a/unoidl2java.c b/unoidl2java.c @@ -196,8 +196,9 @@ static Any mapc(void *env, Any (*fn)(void *env, Any e), Any x) { } static Any method; +static int k; -static void pr_TypeInfo2(char *kind, Any name, int flags, int *i, int j) { +static void pr_TypeInfo2(char *kind, Any name, Any type, int flags, int *i, int j) { pl(*i < 0 && j < 0 ? "" : ","); pr(" new com.sun.star.lib.uno.typeinfo."); pr(kind); pr("TypeInfo(\""); pp(name); pr("\", "); @@ -205,7 +206,11 @@ static void pr_TypeInfo2(char *kind, Any name, int flags, int *i, int j) { pr("\""); pp(method); pr("\", "); } pi(++*i); pr(", "); - pi(flags); pr(")"); + pi(flags); + if(!consp(type)) { + pr(", null, "); pi(++k); + } + pr(")"); } enum flags { // ridljar/com/sun/star/lib/uno/typeinfo.TypeInfo.java @@ -238,39 +243,45 @@ static int readonlyp(void *env, Any x) {return READONLY == kind(x);} static Any pr_TypeInfo1(void *env, Any x) { int f = 0; + Any t = NIL; switch(kind(car(x))) { case ATTRIBUTE: // (attribute (string) KeyName (readonly)) - f |= type_flags(cadr(x)); + t = cadr(x); + f |= type_flags(t); if(some(NULL, readonlyp, cadddr(x))) f |= _READONLY; - pr_TypeInfo2("Attribute", caddr(x), f, env, -1); + pr_TypeInfo2("Attribute", caddr(x), t, f, env, -1); break; case ID: // (NewValue (any)) - f |= type_flags(cadr(x)); - // TODO TYPE_PARAMETER - pr_TypeInfo2("Member", car(x), f, env, -1); + t = cadr(x); + f |= type_flags(t); + pr_TypeInfo2("Member", car(x), t, f, env, -1); break; case METHOD: // (method queryInterface NIL (any) ((in aType (type)))) method = cadr(x); - f |= type_flags(cadddr(x)); + t = cadddr(x); + f |= type_flags(t); if(!null(caddr(x))) f |= _ONEWAY; - pr_TypeInfo2("Method", method, f, env, -1); + pr_TypeInfo2("Method", method, t, f, env, -1); int i = -1; mapc(&i, pr_TypeInfo1, caddddr(x)); break; case IN: // (in aType (type)) - f |= _IN | type_flags(caddr(x)); + t = caddr(x); + f |= _IN | type_flags(t); if(f != _IN && f != (_IN | _ANY)) - pr_TypeInfo2("Parameter", cadr(x), f, env, 0); + pr_TypeInfo2("Parameter", cadr(x), t, f, env, 0); else ++*((int *) env); break; case OUT: - f |= _OUT | type_flags(caddr(x)); - pr_TypeInfo2("Parameter", cadr(x), f, env, 0); + t = caddr(x); + f |= _OUT | type_flags(t); + pr_TypeInfo2("Parameter", cadr(x), t, f, env, 0); break; case INOUT: - f |= _IN | _OUT | type_flags(caddr(x)); - pr_TypeInfo2("Parameter", cadr(x), f, env, 0); + t = caddr(x); + f |= _IN | _OUT | type_flags(t); + pr_TypeInfo2("Parameter", cadr(x), t, f, env, 0); } return NIL; } @@ -295,6 +306,7 @@ static void pr_TypeInfo(Any body) { if(some(NULL, pr_TypeInfo_p, body)) { pr(" public static final com.sun.star.lib.uno.typeinfo.TypeInfo UNOTYPEINFO[] = {"); int i = -1; + k = -1; mapc(&i, pr_TypeInfo1_attribute, body); mapc(&i, pr_TypeInfo1_nonattribute, body); pl("");