[pypy-commit] pypy default: A bit obscure. Seems that we have to put it in translator/c/src in

arigo noreply at buildbot.pypy.org
Wed May 11 15:58:08 CEST 2011


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r44074:7251e0faa780
Date: 2011-05-11 10:12 +0200
http://bitbucket.org/pypy/pypy/changeset/7251e0faa780/

Log:	A bit obscure. Seems that we have to put it in translator/c/src in
	order to be usable during normal translation too...

diff --git a/pypy/module/_multibytecodec/c_codecs.py b/pypy/module/_multibytecodec/c_codecs.py
--- a/pypy/module/_multibytecodec/c_codecs.py
+++ b/pypy/module/_multibytecodec/c_codecs.py
@@ -16,19 +16,20 @@
         return 'EncodeDecodeError(%r, %r, %r)' % (self.start, self.end,
                                                   self.reason)
 
-
-srcdir = py.path.local(pypydir).join('module', '_multibytecodec', 'cjkcodecs')
+srcdir = py.path.local(pypydir).join('translator', 'c')
 
 eci = ExternalCompilationInfo(
     separate_module_files = [
-        srcdir.join('_codecs_cn.c'),
-        srcdir.join('_codecs_hk.c'),
-        srcdir.join('_codecs_iso2022.c'),
-        srcdir.join('_codecs_jp.c'),
-        srcdir.join('_codecs_kr.c'),
-        srcdir.join('_codecs_tw.c'),
-        srcdir.join('multibytecodec.c'),
+        srcdir.join('src', 'cjkcodecs', '_codecs_cn.c'),
+        srcdir.join('src', 'cjkcodecs', '_codecs_hk.c'),
+        srcdir.join('src', 'cjkcodecs', '_codecs_iso2022.c'),
+        srcdir.join('src', 'cjkcodecs', '_codecs_jp.c'),
+        srcdir.join('src', 'cjkcodecs', '_codecs_kr.c'),
+        srcdir.join('src', 'cjkcodecs', '_codecs_tw.c'),
+        srcdir.join('src', 'cjkcodecs', 'multibytecodec.c'),
     ],
+    includes = ['src/cjkcodecs/multibytecodec.h'],
+    include_dirs = [str(srcdir)],
 )
 
 MBERR_TOOSMALL = -1  # insufficient output buffer space
@@ -147,9 +148,11 @@
         src = rffi.cast_ptr_to_adr(src) + rffi.itemoffsetof(rffi.CWCHARP.TO)
         rffi.raw_memcopy(src, dest,
                          llmemory.sizeof(lltype.UniChar) * length)
-        return hlunicode(result)
+        got = hlunicode(result)
     finally:
         keepalive_until_here(result)
+    assert got is not None
+    return got
 
 # ____________________________________________________________
 # Encoding
@@ -227,6 +230,8 @@
         src = rffi.cast_ptr_to_adr(src) + rffi.itemoffsetof(rffi.CCHARP.TO)
         rffi.raw_memcopy(src, dest,
                          llmemory.sizeof(lltype.Char) * length)
-        return hlstr(result)
+        got = hlstr(result)
     finally:
         keepalive_until_here(result)
+    assert got is not None
+    return got
diff --git a/pypy/module/_multibytecodec/test/test_translation.py b/pypy/module/_multibytecodec/test/test_translation.py
new file mode 100644
--- /dev/null
+++ b/pypy/module/_multibytecodec/test/test_translation.py
@@ -0,0 +1,19 @@
+from pypy.module._multibytecodec import c_codecs
+from pypy.translator.c.test import test_standalone
+
+
+class TestTranslation(test_standalone.StandaloneTests):
+
+    def test_translation(self):
+        #
+        def entry_point(argv):
+            codecname, string = argv[1], argv[2]
+            c = c_codecs.getcodec(codecname)
+            u = c_codecs.decode(c, string)
+            r = c_codecs.encode(c, u)
+            print r
+            return 0
+        #
+        t, cbuilder = self.compile(entry_point)
+        data = cbuilder.cmdexec('hz \~\{abc\}')
+        assert data == '~{abc}~}\n'
diff --git a/pypy/module/_multibytecodec/cjkcodecs/README b/pypy/translator/c/src/cjkcodecs/README
rename from pypy/module/_multibytecodec/cjkcodecs/README
rename to pypy/translator/c/src/cjkcodecs/README
diff --git a/pypy/module/_multibytecodec/cjkcodecs/_codecs_cn.c b/pypy/translator/c/src/cjkcodecs/_codecs_cn.c
rename from pypy/module/_multibytecodec/cjkcodecs/_codecs_cn.c
rename to pypy/translator/c/src/cjkcodecs/_codecs_cn.c
--- a/pypy/module/_multibytecodec/cjkcodecs/_codecs_cn.c
+++ b/pypy/translator/c/src/cjkcodecs/_codecs_cn.c
@@ -4,8 +4,8 @@
  * Written by Hye-Shik Chang <perky at FreeBSD.org>
  */
 
-#include "cjkcodecs.h"
-#include "mappings_cn.h"
+#include "src/cjkcodecs/cjkcodecs.h"
+#include "src/cjkcodecs/mappings_cn.h"
 
 /**
  * hz is predefined as 100 on AIX. So we undefine it to avoid
diff --git a/pypy/module/_multibytecodec/cjkcodecs/_codecs_hk.c b/pypy/translator/c/src/cjkcodecs/_codecs_hk.c
rename from pypy/module/_multibytecodec/cjkcodecs/_codecs_hk.c
rename to pypy/translator/c/src/cjkcodecs/_codecs_hk.c
--- a/pypy/module/_multibytecodec/cjkcodecs/_codecs_hk.c
+++ b/pypy/translator/c/src/cjkcodecs/_codecs_hk.c
@@ -6,8 +6,8 @@
 
 #define USING_IMPORTED_MAPS
 
-#include "cjkcodecs.h"
-#include "mappings_hk.h"
+#include "src/cjkcodecs/cjkcodecs.h"
+#include "src/cjkcodecs/mappings_hk.h"
 
 /*
  * BIG5HKSCS codec
diff --git a/pypy/module/_multibytecodec/cjkcodecs/_codecs_iso2022.c b/pypy/translator/c/src/cjkcodecs/_codecs_iso2022.c
rename from pypy/module/_multibytecodec/cjkcodecs/_codecs_iso2022.c
rename to pypy/translator/c/src/cjkcodecs/_codecs_iso2022.c
--- a/pypy/module/_multibytecodec/cjkcodecs/_codecs_iso2022.c
+++ b/pypy/translator/c/src/cjkcodecs/_codecs_iso2022.c
@@ -10,10 +10,10 @@
 #define EMULATE_JISX0213_2000_ENCODE_INVALID MAP_UNMAPPABLE
 #define EMULATE_JISX0213_2000_DECODE_INVALID MAP_UNMAPPABLE
 
-#include "cjkcodecs.h"
-#include "alg_jisx0201.h"
-#include "emu_jisx0213_2000.h"
-#include "mappings_jisx0213_pair.h"
+#include "src/cjkcodecs/cjkcodecs.h"
+#include "src/cjkcodecs/alg_jisx0201.h"
+#include "src/cjkcodecs/emu_jisx0213_2000.h"
+#include "src/cjkcodecs/mappings_jisx0213_pair.h"
 
 /* STATE
 
diff --git a/pypy/module/_multibytecodec/cjkcodecs/_codecs_jp.c b/pypy/translator/c/src/cjkcodecs/_codecs_jp.c
rename from pypy/module/_multibytecodec/cjkcodecs/_codecs_jp.c
rename to pypy/translator/c/src/cjkcodecs/_codecs_jp.c
--- a/pypy/module/_multibytecodec/cjkcodecs/_codecs_jp.c
+++ b/pypy/translator/c/src/cjkcodecs/_codecs_jp.c
@@ -7,11 +7,11 @@
 #define USING_BINARY_PAIR_SEARCH
 #define EMPBASE 0x20000
 
-#include "cjkcodecs.h"
-#include "mappings_jp.h"
-#include "mappings_jisx0213_pair.h"
-#include "alg_jisx0201.h"
-#include "emu_jisx0213_2000.h"
+#include "src/cjkcodecs/cjkcodecs.h"
+#include "src/cjkcodecs/mappings_jp.h"
+#include "src/cjkcodecs/mappings_jisx0213_pair.h"
+#include "src/cjkcodecs/alg_jisx0201.h"
+#include "src/cjkcodecs/emu_jisx0213_2000.h"
 
 /*
  * CP932 codec
diff --git a/pypy/module/_multibytecodec/cjkcodecs/_codecs_kr.c b/pypy/translator/c/src/cjkcodecs/_codecs_kr.c
rename from pypy/module/_multibytecodec/cjkcodecs/_codecs_kr.c
rename to pypy/translator/c/src/cjkcodecs/_codecs_kr.c
--- a/pypy/module/_multibytecodec/cjkcodecs/_codecs_kr.c
+++ b/pypy/translator/c/src/cjkcodecs/_codecs_kr.c
@@ -4,8 +4,8 @@
  * Written by Hye-Shik Chang <perky at FreeBSD.org>
  */
 
-#include "cjkcodecs.h"
-#include "mappings_kr.h"
+#include "src/cjkcodecs/cjkcodecs.h"
+#include "src/cjkcodecs/mappings_kr.h"
 
 /*
  * EUC-KR codec
diff --git a/pypy/module/_multibytecodec/cjkcodecs/_codecs_tw.c b/pypy/translator/c/src/cjkcodecs/_codecs_tw.c
rename from pypy/module/_multibytecodec/cjkcodecs/_codecs_tw.c
rename to pypy/translator/c/src/cjkcodecs/_codecs_tw.c
--- a/pypy/module/_multibytecodec/cjkcodecs/_codecs_tw.c
+++ b/pypy/translator/c/src/cjkcodecs/_codecs_tw.c
@@ -4,8 +4,8 @@
  * Written by Hye-Shik Chang <perky at FreeBSD.org>
  */
 
-#include "cjkcodecs.h"
-#include "mappings_tw.h"
+#include "src/cjkcodecs/cjkcodecs.h"
+#include "src/cjkcodecs/mappings_tw.h"
 
 /*
  * BIG5 codec
diff --git a/pypy/module/_multibytecodec/cjkcodecs/alg_jisx0201.h b/pypy/translator/c/src/cjkcodecs/alg_jisx0201.h
rename from pypy/module/_multibytecodec/cjkcodecs/alg_jisx0201.h
rename to pypy/translator/c/src/cjkcodecs/alg_jisx0201.h
diff --git a/pypy/module/_multibytecodec/cjkcodecs/cjkcodecs.h b/pypy/translator/c/src/cjkcodecs/cjkcodecs.h
rename from pypy/module/_multibytecodec/cjkcodecs/cjkcodecs.h
rename to pypy/translator/c/src/cjkcodecs/cjkcodecs.h
--- a/pypy/module/_multibytecodec/cjkcodecs/cjkcodecs.h
+++ b/pypy/translator/c/src/cjkcodecs/cjkcodecs.h
@@ -9,7 +9,7 @@
 #ifndef _CJKCODECS_H_
 #define _CJKCODECS_H_
 
-#include "multibytecodec.h"
+#include "src/cjkcodecs/multibytecodec.h"
 
 
 /* a unicode "undefined" codepoint */
diff --git a/pypy/module/_multibytecodec/cjkcodecs/emu_jisx0213_2000.h b/pypy/translator/c/src/cjkcodecs/emu_jisx0213_2000.h
rename from pypy/module/_multibytecodec/cjkcodecs/emu_jisx0213_2000.h
rename to pypy/translator/c/src/cjkcodecs/emu_jisx0213_2000.h
diff --git a/pypy/module/_multibytecodec/cjkcodecs/mappings_cn.h b/pypy/translator/c/src/cjkcodecs/mappings_cn.h
rename from pypy/module/_multibytecodec/cjkcodecs/mappings_cn.h
rename to pypy/translator/c/src/cjkcodecs/mappings_cn.h
diff --git a/pypy/module/_multibytecodec/cjkcodecs/mappings_hk.h b/pypy/translator/c/src/cjkcodecs/mappings_hk.h
rename from pypy/module/_multibytecodec/cjkcodecs/mappings_hk.h
rename to pypy/translator/c/src/cjkcodecs/mappings_hk.h
diff --git a/pypy/module/_multibytecodec/cjkcodecs/mappings_jisx0213_pair.h b/pypy/translator/c/src/cjkcodecs/mappings_jisx0213_pair.h
rename from pypy/module/_multibytecodec/cjkcodecs/mappings_jisx0213_pair.h
rename to pypy/translator/c/src/cjkcodecs/mappings_jisx0213_pair.h
diff --git a/pypy/module/_multibytecodec/cjkcodecs/mappings_jp.h b/pypy/translator/c/src/cjkcodecs/mappings_jp.h
rename from pypy/module/_multibytecodec/cjkcodecs/mappings_jp.h
rename to pypy/translator/c/src/cjkcodecs/mappings_jp.h
diff --git a/pypy/module/_multibytecodec/cjkcodecs/mappings_kr.h b/pypy/translator/c/src/cjkcodecs/mappings_kr.h
rename from pypy/module/_multibytecodec/cjkcodecs/mappings_kr.h
rename to pypy/translator/c/src/cjkcodecs/mappings_kr.h
diff --git a/pypy/module/_multibytecodec/cjkcodecs/mappings_tw.h b/pypy/translator/c/src/cjkcodecs/mappings_tw.h
rename from pypy/module/_multibytecodec/cjkcodecs/mappings_tw.h
rename to pypy/translator/c/src/cjkcodecs/mappings_tw.h
diff --git a/pypy/module/_multibytecodec/cjkcodecs/multibytecodec.c b/pypy/translator/c/src/cjkcodecs/multibytecodec.c
rename from pypy/module/_multibytecodec/cjkcodecs/multibytecodec.c
rename to pypy/translator/c/src/cjkcodecs/multibytecodec.c
--- a/pypy/module/_multibytecodec/cjkcodecs/multibytecodec.c
+++ b/pypy/translator/c/src/cjkcodecs/multibytecodec.c
@@ -1,5 +1,5 @@
 #include <stdlib.h>
-#include "multibytecodec.h"
+#include "src/cjkcodecs/multibytecodec.h"
 
 
 struct pypy_cjk_dec_s *pypy_cjk_dec_init(const MultibyteCodec *codec,
diff --git a/pypy/module/_multibytecodec/cjkcodecs/multibytecodec.h b/pypy/translator/c/src/cjkcodecs/multibytecodec.h
rename from pypy/module/_multibytecodec/cjkcodecs/multibytecodec.h
rename to pypy/translator/c/src/cjkcodecs/multibytecodec.h
--- a/pypy/module/_multibytecodec/cjkcodecs/multibytecodec.h
+++ b/pypy/translator/c/src/cjkcodecs/multibytecodec.h
@@ -99,4 +99,46 @@
 Py_ssize_t pypy_cjk_enc_inbuf_remaining(struct pypy_cjk_enc_s *d);
 Py_ssize_t pypy_cjk_enc_inbuf_consumed(struct pypy_cjk_enc_s* d);
 
+/* list of codecs defined in the .c files */
+
+#define DEFINE_CODEC(name)                              \
+    const MultibyteCodec *pypy_cjkcodec_##name(void);
+
+// _codecs_cn
+DEFINE_CODEC(gb2312)
+DEFINE_CODEC(gbk)
+DEFINE_CODEC(gb18030)
+DEFINE_CODEC(hz)
+
+//_codecs_hk
+DEFINE_CODEC(big5hkscs)
+
+//_codecs_iso2022
+DEFINE_CODEC(iso2022_kr)
+DEFINE_CODEC(iso2022_jp)
+DEFINE_CODEC(iso2022_jp_1)
+DEFINE_CODEC(iso2022_jp_2)
+DEFINE_CODEC(iso2022_jp_2004)
+DEFINE_CODEC(iso2022_jp_3)
+DEFINE_CODEC(iso2022_jp_ext)
+
+//_codecs_jp
+DEFINE_CODEC(shift_jis)
+DEFINE_CODEC(cp932)
+DEFINE_CODEC(euc_jp)
+DEFINE_CODEC(shift_jis_2004)
+DEFINE_CODEC(euc_jis_2004)
+DEFINE_CODEC(euc_jisx0213)
+DEFINE_CODEC(shift_jisx0213)
+
+//_codecs_kr
+DEFINE_CODEC(euc_kr)
+DEFINE_CODEC(cp949)
+DEFINE_CODEC(johab)
+
+//_codecs_tw
+DEFINE_CODEC(big5)
+DEFINE_CODEC(cp950)
+
+
 #endif


More information about the pypy-commit mailing list