add gcj and java->python initial support
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8134 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
c567ffaf27
commit
e4b8871ae2
13 changed files with 659 additions and 2 deletions
|
|
@ -1,6 +1,26 @@
|
|||
Version 1.3.28 (unreleased).
|
||||
===========================
|
||||
|
||||
12/30/2005: mmatus
|
||||
|
||||
- Add initial support for gcj and Java -> Python. See
|
||||
|
||||
Examples/python/java
|
||||
|
||||
to see how to use gcj and how to export java classes into
|
||||
python.
|
||||
|
||||
The idea is to put all the common code for gcj inside
|
||||
|
||||
Lib/gcj
|
||||
|
||||
such that it can be used from other languages.
|
||||
|
||||
Python provide a simple jstring.i interface, which can be
|
||||
used as a modelo to ruby,tcl and perl, ie, the languages
|
||||
that use the UTL.
|
||||
|
||||
|
||||
|
||||
12/29/2005: mmatus
|
||||
- Add the copyctor feature/directive to enable the automatic
|
||||
|
|
@ -80,7 +100,7 @@ Version 1.3.28 (unreleased).
|
|||
which always confuses people, since the first thing you do
|
||||
is just to write the 'in' typemap.
|
||||
|
||||
Well, the 'match' option solve the problem, and if you
|
||||
Well, the 'match' option solves the problem, and if you
|
||||
write instead
|
||||
|
||||
%typemap(in) SWIGTYPE * (int res) {..}
|
||||
|
|
|
|||
|
|
@ -26,3 +26,5 @@ swigrun
|
|||
template
|
||||
varargs
|
||||
variables
|
||||
java
|
||||
|
||||
|
|
|
|||
29
Examples/python/java/Example.java
Normal file
29
Examples/python/java/Example.java
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
public class Example {
|
||||
public int mPublicInt;
|
||||
|
||||
public Example() {
|
||||
mPublicInt = 0;
|
||||
}
|
||||
|
||||
public Example(int IntVal) {
|
||||
mPublicInt = IntVal;
|
||||
}
|
||||
|
||||
|
||||
public int Add(int a, int b) {
|
||||
return (a+b);
|
||||
}
|
||||
|
||||
public float Add(float a, float b) {
|
||||
return (a+b);
|
||||
}
|
||||
|
||||
public String Add(String a, String b) {
|
||||
return (a+b);
|
||||
}
|
||||
|
||||
public Example Add(Example a, Example b) {
|
||||
return new Example(a.mPublicInt + b.mPublicInt);
|
||||
}
|
||||
}
|
||||
|
||||
27
Examples/python/java/Makefile
Normal file
27
Examples/python/java/Makefile
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
CXX = gcj
|
||||
TOP = ../..
|
||||
SWIG = $(TOP)/../preinst-swig
|
||||
CXXSRCS =
|
||||
TARGET = example
|
||||
INTERFACE = example.i
|
||||
LIBS = -lm
|
||||
|
||||
all:: Example.class
|
||||
$(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \
|
||||
TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' CXX="gcj" CFLAGS="-fPIC" \
|
||||
CXXSHARED="gcj -fPIC -shared Example.class" DEFS='' python_cpp
|
||||
|
||||
|
||||
clean::
|
||||
$(MAKE) -f $(TOP)/Makefile python_clean
|
||||
rm -f $(TARGET).py
|
||||
rm -f *.class Example.h
|
||||
|
||||
check: all
|
||||
|
||||
|
||||
Example.class: Example.java
|
||||
gcj -v || exit 0
|
||||
gcj -fPIC -C -c -g Example.java
|
||||
gcjh Example
|
||||
|
||||
0
Examples/python/java/example.cxx
Normal file
0
Examples/python/java/example.cxx
Normal file
11
Examples/python/java/example.i
Normal file
11
Examples/python/java/example.i
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
%module example
|
||||
%include <gcj/cni.i>
|
||||
|
||||
%include <jstring.i>
|
||||
|
||||
%{
|
||||
#include "Example.h"
|
||||
%}
|
||||
|
||||
|
||||
%include Example.h
|
||||
16
Examples/python/java/runme.py
Normal file
16
Examples/python/java/runme.py
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
from example import *
|
||||
|
||||
JvCreateJavaVM(None)
|
||||
JvAttachCurrentThread(None, None)
|
||||
|
||||
e1 = Example(1)
|
||||
e2 = Example(2)
|
||||
|
||||
print e1.Add(1,2)
|
||||
print e1.Add(1.0,2.0)
|
||||
e3 = e1.Add(e1,e2)
|
||||
print e3.mPublicInt
|
||||
|
||||
print e1.Add("1","2")
|
||||
|
||||
JvDetachCurrentThread()
|
||||
43
Lib/gcj/cni.i
Normal file
43
Lib/gcj/cni.i
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
%{
|
||||
#include <gcj/cni.h>
|
||||
%}
|
||||
|
||||
%include <gcj/javaprims.i>
|
||||
|
||||
extern jobject JvAllocObject (jclass cls);
|
||||
|
||||
extern jobject JvAllocObject (jclass cls, jsize sz);
|
||||
|
||||
extern void JvInitClass (jclass cls);
|
||||
|
||||
extern jstring JvAllocString (jsize sz);
|
||||
|
||||
extern jstring JvNewString (const jchar *chars, jsize len);
|
||||
|
||||
extern jstring JvNewStringLatin1 (const char *bytes, jsize len);
|
||||
|
||||
extern jstring JvNewStringLatin1 (const char *bytes);
|
||||
|
||||
extern jchar* JvGetStringChars (jstring str);
|
||||
|
||||
extern jsize JvGetStringUTFLength (jstring string);
|
||||
|
||||
extern jsize JvGetStringUTFRegion (jstring str, jsize start, jsize len, char *buf);
|
||||
|
||||
extern jstring JvNewStringUTF (const char *bytes);
|
||||
|
||||
extern void *JvMalloc (jsize size);
|
||||
|
||||
extern void JvFree (void *ptr);
|
||||
|
||||
extern jint JvCreateJavaVM (void* vm_args);
|
||||
|
||||
extern java::lang::Thread* JvAttachCurrentThread (jstring name, java::lang::ThreadGroup* group);
|
||||
|
||||
extern java::lang::Thread* JvAttachCurrentThreadAsDaemon (jstring name, java::lang::ThreadGroup* group);
|
||||
|
||||
extern jint JvDetachCurrentThread (void);
|
||||
|
||||
|
||||
%include <gcj/cni.swg>
|
||||
|
||||
14
Lib/gcj/cni.swg
Normal file
14
Lib/gcj/cni.swg
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
/*
|
||||
Swig especial
|
||||
*/
|
||||
|
||||
#ifdef SWIG
|
||||
|
||||
#define __attribute__(...)
|
||||
%ignore class$;
|
||||
#pragma SWIG nowarn=313,402
|
||||
|
||||
%nodefaultdtor;
|
||||
|
||||
#endif
|
||||
|
||||
422
Lib/gcj/javaprims.i
Normal file
422
Lib/gcj/javaprims.i
Normal file
|
|
@ -0,0 +1,422 @@
|
|||
%include <stdint.i>
|
||||
|
||||
typedef int8_t jbyte;
|
||||
typedef int16_t jshort;
|
||||
typedef int32_t jint;
|
||||
typedef int64_t jlong;
|
||||
typedef float jfloat;
|
||||
typedef double jdouble;
|
||||
typedef jint jsize;
|
||||
typedef int8_t jboolean;
|
||||
|
||||
extern "Java"
|
||||
{
|
||||
namespace java
|
||||
{
|
||||
namespace io
|
||||
{
|
||||
class BufferedInputStream;
|
||||
class BufferedOutputStream;
|
||||
class BufferedReader;
|
||||
class BufferedWriter;
|
||||
class ByteArrayInputStream;
|
||||
class ByteArrayOutputStream;
|
||||
class CharArrayReader;
|
||||
class CharArrayWriter;
|
||||
class CharConversionException;
|
||||
class DataInput;
|
||||
class DataInputStream;
|
||||
class DataOutput;
|
||||
class DataOutputStream;
|
||||
class EOFException;
|
||||
class Externalizable;
|
||||
class File;
|
||||
class FileDescriptor;
|
||||
class FileFilter;
|
||||
class FileInputStream;
|
||||
class FileNotFoundException;
|
||||
class FileOutputStream;
|
||||
class FilePermission;
|
||||
class FileReader;
|
||||
class FileWriter;
|
||||
class FilenameFilter;
|
||||
class FilterInputStream;
|
||||
class FilterOutputStream;
|
||||
class FilterReader;
|
||||
class FilterWriter;
|
||||
class IOException;
|
||||
class InputStream;
|
||||
class InputStreamReader;
|
||||
class InterfaceComparator;
|
||||
class InterruptedIOException;
|
||||
class InvalidClassException;
|
||||
class InvalidObjectException;
|
||||
class LineNumberInputStream;
|
||||
class LineNumberReader;
|
||||
class MemberComparator;
|
||||
class NotActiveException;
|
||||
class NotSerializableException;
|
||||
class ObjectInput;
|
||||
class ObjectInputStream;
|
||||
class ObjectInputStream$GetField;
|
||||
class ObjectInputValidation;
|
||||
class ObjectOutput;
|
||||
class ObjectOutputStream;
|
||||
class ObjectOutputStream$PutField;
|
||||
class ObjectStreamClass;
|
||||
class ObjectStreamConstants;
|
||||
class ObjectStreamException;
|
||||
class ObjectStreamField;
|
||||
class OptionalDataException;
|
||||
class OutputStream;
|
||||
class OutputStreamWriter;
|
||||
class PipedInputStream;
|
||||
class PipedOutputStream;
|
||||
class PipedReader;
|
||||
class PipedWriter;
|
||||
class PrintStream;
|
||||
class PrintWriter;
|
||||
class PushbackInputStream;
|
||||
class PushbackReader;
|
||||
class RandomAccessFile;
|
||||
class Reader;
|
||||
class SequenceInputStream;
|
||||
class Serializable;
|
||||
class SerializablePermission;
|
||||
class StreamCorruptedException;
|
||||
class StreamTokenizer;
|
||||
class StringBufferInputStream;
|
||||
class StringReader;
|
||||
class StringWriter;
|
||||
class SyncFailedException;
|
||||
class UTFDataFormatException;
|
||||
class UnsupportedEncodingException;
|
||||
class VMObjectStreamClass;
|
||||
class ValidatorAndPriority;
|
||||
class WriteAbortedException;
|
||||
class Writer;
|
||||
}
|
||||
|
||||
namespace lang
|
||||
{
|
||||
class AbstractMethodError;
|
||||
class ArithmeticException;
|
||||
class ArrayIndexOutOfBoundsException;
|
||||
class ArrayStoreException;
|
||||
class AssertionError;
|
||||
class Boolean;
|
||||
class Byte;
|
||||
class CharSequence;
|
||||
class Character;
|
||||
class Character$Subset;
|
||||
class Character$UnicodeBlock;
|
||||
class Class;
|
||||
class ClassCastException;
|
||||
class ClassCircularityError;
|
||||
class ClassFormatError;
|
||||
class ClassLoader;
|
||||
class ClassNotFoundException;
|
||||
class CloneNotSupportedException;
|
||||
class Cloneable;
|
||||
class Comparable;
|
||||
class Compiler;
|
||||
class ConcreteProcess;
|
||||
class Double;
|
||||
class Error;
|
||||
class Exception;
|
||||
class ExceptionInInitializerError;
|
||||
class Float;
|
||||
class IllegalAccessError;
|
||||
class IllegalAccessException;
|
||||
class IllegalArgumentException;
|
||||
class IllegalMonitorStateException;
|
||||
class IllegalStateException;
|
||||
class IllegalThreadStateException;
|
||||
class IncompatibleClassChangeError;
|
||||
class IndexOutOfBoundsException;
|
||||
class InheritableThreadLocal;
|
||||
class InstantiationError;
|
||||
class InstantiationException;
|
||||
class Integer;
|
||||
class InternalError;
|
||||
class InterruptedException;
|
||||
class LinkageError;
|
||||
class Long;
|
||||
class Math;
|
||||
class NegativeArraySizeException;
|
||||
class NoClassDefFoundError;
|
||||
class NoSuchFieldError;
|
||||
class NoSuchFieldException;
|
||||
class NoSuchMethodError;
|
||||
class NoSuchMethodException;
|
||||
class NullPointerException;
|
||||
class Number;
|
||||
class NumberFormatException;
|
||||
class Object;
|
||||
class OutOfMemoryError;
|
||||
class Package;
|
||||
class Process;
|
||||
class Runnable;
|
||||
class Runtime;
|
||||
class RuntimeException;
|
||||
class RuntimePermission;
|
||||
class SecurityContext;
|
||||
class SecurityException;
|
||||
class SecurityManager;
|
||||
class Short;
|
||||
class StackOverflowError;
|
||||
class StackTraceElement;
|
||||
class StrictMath;
|
||||
class String;
|
||||
class String$CaseInsensitiveComparator;
|
||||
class StringBuffer;
|
||||
class StringIndexOutOfBoundsException;
|
||||
class System;
|
||||
class Thread;
|
||||
class ThreadDeath;
|
||||
class ThreadGroup;
|
||||
class ThreadLocal;
|
||||
class Throwable;
|
||||
class UnknownError;
|
||||
class UnsatisfiedLinkError;
|
||||
class UnsupportedClassVersionError;
|
||||
class UnsupportedOperationException;
|
||||
class VMClassLoader;
|
||||
class VMSecurityManager;
|
||||
class VMThrowable;
|
||||
class VerifyError;
|
||||
class VirtualMachineError;
|
||||
class Void;
|
||||
namespace ref
|
||||
{
|
||||
class PhantomReference;
|
||||
class Reference;
|
||||
class ReferenceQueue;
|
||||
class SoftReference;
|
||||
class WeakReference;
|
||||
}
|
||||
|
||||
namespace reflect
|
||||
{
|
||||
class AccessibleObject;
|
||||
class Array;
|
||||
class Constructor;
|
||||
class Field;
|
||||
class InvocationHandler;
|
||||
class InvocationTargetException;
|
||||
class Member;
|
||||
class Method;
|
||||
class Modifier;
|
||||
class Proxy;
|
||||
class Proxy$ClassFactory;
|
||||
class Proxy$ProxyData;
|
||||
class Proxy$ProxySignature;
|
||||
class Proxy$ProxyType;
|
||||
class ReflectPermission;
|
||||
class UndeclaredThrowableException;
|
||||
}
|
||||
}
|
||||
|
||||
namespace util
|
||||
{
|
||||
class AbstractCollection;
|
||||
class AbstractList;
|
||||
class AbstractMap;
|
||||
class AbstractMap$BasicMapEntry;
|
||||
class AbstractSequentialList;
|
||||
class AbstractSet;
|
||||
class ArrayList;
|
||||
class Arrays;
|
||||
class Arrays$ArrayList;
|
||||
class BitSet;
|
||||
class Calendar;
|
||||
class Collection;
|
||||
class Collections;
|
||||
class Collections$CopiesList;
|
||||
class Collections$EmptyList;
|
||||
class Collections$EmptyMap;
|
||||
class Collections$EmptySet;
|
||||
class Collections$ReverseComparator;
|
||||
class Collections$SingletonList;
|
||||
class Collections$SingletonMap;
|
||||
class Collections$SingletonSet;
|
||||
class Collections$SynchronizedCollection;
|
||||
class Collections$SynchronizedIterator;
|
||||
class Collections$SynchronizedList;
|
||||
class Collections$SynchronizedListIterator;
|
||||
class Collections$SynchronizedMap;
|
||||
class Collections$SynchronizedMapEntry;
|
||||
class Collections$SynchronizedRandomAccessList;
|
||||
class Collections$SynchronizedSet;
|
||||
class Collections$SynchronizedSortedMap;
|
||||
class Collections$SynchronizedSortedSet;
|
||||
class Collections$UnmodifiableCollection;
|
||||
class Collections$UnmodifiableEntrySet;
|
||||
class Collections$UnmodifiableIterator;
|
||||
class Collections$UnmodifiableList;
|
||||
class Collections$UnmodifiableListIterator;
|
||||
class Collections$UnmodifiableMap;
|
||||
class Collections$UnmodifiableRandomAccessList;
|
||||
class Collections$UnmodifiableSet;
|
||||
class Collections$UnmodifiableSortedMap;
|
||||
class Collections$UnmodifiableSortedSet;
|
||||
class Comparator;
|
||||
class ConcurrentModificationException;
|
||||
class Currency;
|
||||
class Date;
|
||||
class Dictionary;
|
||||
class EmptyStackException;
|
||||
class Enumeration;
|
||||
class EventListener;
|
||||
class EventListenerProxy;
|
||||
class EventObject;
|
||||
class GregorianCalendar;
|
||||
class HashMap;
|
||||
class HashMap$HashEntry;
|
||||
class HashMap$HashIterator;
|
||||
class HashSet;
|
||||
class Hashtable;
|
||||
class Hashtable$Enumerator;
|
||||
class Hashtable$HashEntry;
|
||||
class Hashtable$HashIterator;
|
||||
class IdentityHashMap;
|
||||
class IdentityHashMap$IdentityEntry;
|
||||
class IdentityHashMap$IdentityIterator;
|
||||
class Iterator;
|
||||
class LinkedHashMap;
|
||||
class LinkedHashMap$LinkedHashEntry;
|
||||
class LinkedHashSet;
|
||||
class LinkedList;
|
||||
class LinkedList$Entry;
|
||||
class LinkedList$LinkedListItr;
|
||||
class List;
|
||||
class ListIterator;
|
||||
class ListResourceBundle;
|
||||
class Locale;
|
||||
class Map;
|
||||
class Map$Entry;
|
||||
class Map$Map;
|
||||
class MissingResourceException;
|
||||
class MyResources;
|
||||
class NoSuchElementException;
|
||||
class Observable;
|
||||
class Observer;
|
||||
class Properties;
|
||||
class PropertyPermission;
|
||||
class PropertyPermissionCollection;
|
||||
class PropertyResourceBundle;
|
||||
class Random;
|
||||
class RandomAccess;
|
||||
class RandomAccessSubList;
|
||||
class ResourceBundle;
|
||||
class Set;
|
||||
class SimpleTimeZone;
|
||||
class SortedMap;
|
||||
class SortedSet;
|
||||
class Stack;
|
||||
class StringTokenizer;
|
||||
class SubList;
|
||||
class TimeZone;
|
||||
class Timer;
|
||||
class Timer$Scheduler;
|
||||
class Timer$TaskQueue;
|
||||
class TimerTask;
|
||||
class TooManyListenersException;
|
||||
class TreeMap;
|
||||
class TreeMap$Node;
|
||||
class TreeMap$SubMap;
|
||||
class TreeMap$TreeIterator;
|
||||
class TreeSet;
|
||||
class Vector;
|
||||
class WeakHashMap;
|
||||
class WeakHashMap$WeakBucket;
|
||||
class WeakHashMap$WeakEntry;
|
||||
class WeakHashMap$WeakEntrySet;
|
||||
namespace jar
|
||||
{
|
||||
class Attributes;
|
||||
class Attributes$Name;
|
||||
class JarEntry;
|
||||
class JarException;
|
||||
class JarFile;
|
||||
class JarFile$JarEnumeration;
|
||||
class JarInputStream;
|
||||
class JarOutputStream;
|
||||
class Manifest;
|
||||
}
|
||||
|
||||
namespace logging
|
||||
{
|
||||
class ConsoleHandler;
|
||||
class ErrorManager;
|
||||
class FileHandler;
|
||||
class Filter;
|
||||
class Formatter;
|
||||
class Handler;
|
||||
class Level;
|
||||
class LogManager;
|
||||
class LogRecord;
|
||||
class Logger;
|
||||
class LoggingPermission;
|
||||
class MemoryHandler;
|
||||
class SimpleFormatter;
|
||||
class SocketHandler;
|
||||
class StreamHandler;
|
||||
class XMLFormatter;
|
||||
}
|
||||
|
||||
namespace prefs
|
||||
{
|
||||
class AbstractPreferences;
|
||||
class BackingStoreException;
|
||||
class InvalidPreferencesFormatException;
|
||||
class NodeChangeEvent;
|
||||
class NodeChangeListener;
|
||||
class PreferenceChangeEvent;
|
||||
class PreferenceChangeListener;
|
||||
class Preferences;
|
||||
class PreferencesFactory;
|
||||
}
|
||||
|
||||
namespace regex
|
||||
{
|
||||
class Matcher;
|
||||
class Pattern;
|
||||
class PatternSyntaxException;
|
||||
}
|
||||
|
||||
namespace zip
|
||||
{
|
||||
class Adler32;
|
||||
class CRC32;
|
||||
class CheckedInputStream;
|
||||
class CheckedOutputStream;
|
||||
class Checksum;
|
||||
class DataFormatException;
|
||||
class Deflater;
|
||||
class DeflaterOutputStream;
|
||||
class GZIPInputStream;
|
||||
class GZIPOutputStream;
|
||||
class Inflater;
|
||||
class InflaterInputStream;
|
||||
class ZipConstants;
|
||||
class ZipEntry;
|
||||
class ZipException;
|
||||
class ZipFile;
|
||||
class ZipFile$PartialInputStream;
|
||||
class ZipFile$ZipEntryEnumeration;
|
||||
class ZipInputStream;
|
||||
class ZipOutputStream;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
typedef class java::lang::Object* jobject;
|
||||
typedef class java::lang::Class* jclass;
|
||||
typedef class java::lang::Throwable* jthrowable;
|
||||
typedef class java::lang::String* jstring;
|
||||
|
||||
|
||||
%include <gcj/cni.swg>
|
||||
|
||||
1
Lib/python/cni.i
Normal file
1
Lib/python/cni.i
Normal file
|
|
@ -0,0 +1 @@
|
|||
%include <typemaps/cni.swg>
|
||||
72
Lib/python/jstring.i
Normal file
72
Lib/python/jstring.i
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
%include <typemaps/valtypes.swg>
|
||||
|
||||
%fragment(SWIG_AsVal_frag(jstring),"header") {
|
||||
SWIGINTERN int
|
||||
SWIG_AsVal(jstring)(PyObject *obj, jstring *val)
|
||||
{
|
||||
if (obj == Py_None) {
|
||||
if (val) *val = 0;
|
||||
return SWIG_OK;
|
||||
}
|
||||
|
||||
PyObject *tmp = 0;
|
||||
int isunicode = PyUnicode_Check(obj);
|
||||
if (!isunicode && PyString_Check(obj)) {
|
||||
if (val) {
|
||||
obj = tmp = PyUnicode_FromObject(obj);
|
||||
}
|
||||
isunicode = 1;
|
||||
}
|
||||
if (isunicode) {
|
||||
if (val) {
|
||||
if (sizeof(Py_UNICODE) == sizeof(jchar)) {
|
||||
*val = JvNewString((const jchar *) PyUnicode_AS_UNICODE(obj),PyUnicode_GET_SIZE(obj));
|
||||
return SWIG_NEWOBJ;
|
||||
} else {
|
||||
int len = PyUnicode_GET_SIZE(obj);
|
||||
Py_UNICODE *pchars = PyUnicode_AS_UNICODE(obj);
|
||||
*val = JvAllocString (len);
|
||||
jchar *jchars = JvGetStringChars (*val);
|
||||
for (int i = 0; i < len; ++i) {
|
||||
jchars[i] = pchars[i];
|
||||
}
|
||||
return SWIG_NEWOBJ;
|
||||
}
|
||||
}
|
||||
Py_XDECREF(tmp);
|
||||
return SWIG_OK;
|
||||
}
|
||||
return SWIG_TypeError;
|
||||
}
|
||||
}
|
||||
|
||||
%fragment(SWIG_From_frag(jstring),"header") {
|
||||
SWIGINTERNINLINE PyObject *
|
||||
SWIG_From(jstring)(jstring js)
|
||||
{
|
||||
if (!js) {
|
||||
return SWIG_Py_Void();
|
||||
}
|
||||
if (sizeof(Py_UNICODE) == sizeof(jchar)) {
|
||||
return PyUnicode_FromUnicode((const Py_UNICODE *) JvGetStringChars(js),
|
||||
js->length());
|
||||
} else {
|
||||
int len = js->length();
|
||||
Py_UNICODE pchars[len];
|
||||
jchar *jchars = JvGetStringChars(js);
|
||||
|
||||
for (int i = 0; i < len; i++) {
|
||||
pchars[i] = jchars[i];
|
||||
}
|
||||
return PyUnicode_FromUnicode((const Py_UNICODE *) pchars, len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
%typemaps_asvalfrom(%checkcode(STRING),
|
||||
%arg(SWIG_AsVal(jstring)),
|
||||
%arg(SWIG_From(jstring)),
|
||||
%arg(SWIG_AsVal_frag(jstring)),
|
||||
%arg(SWIG_From_frag(jstring)),
|
||||
java::lang::String *);
|
||||
|
||||
|
|
@ -328,7 +328,7 @@ install-main:
|
|||
@echo "Installing $(BIN_DIR)/$(TARGET)"
|
||||
@$(INSTALL_PROGRAM) $(TARGET) $(DESTDIR)$(BIN_DIR)/$(TARGET)
|
||||
|
||||
lib-languages = typemaps tcl perl5 python guile java mzscheme ruby php4 ocaml \
|
||||
lib-languages = gcj typemaps tcl perl5 python guile java mzscheme ruby php4 ocaml \
|
||||
pike chicken csharp modula3 allegrocl clisp lua cffi
|
||||
|
||||
lib-modules = std
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue