this repo has no description
at trunk 142 lines 4.8 kB view raw
1// Copyright (c) Facebook, Inc. and its affiliates. (http://www.facebook.com) 2#include "cpython-func.h" 3 4#include "api-handle.h" 5#include "runtime.h" 6 7const char* Py_hexdigits = "0123456789abcdef"; 8 9namespace py { 10 11PY_EXPORT PyObject* PyCodec_BackslashReplaceErrors(PyObject* /* c */) { 12 UNIMPLEMENTED("PyCodec_BackslashReplaceErrors"); 13} 14 15PY_EXPORT PyObject* PyCodec_Decode(PyObject* /* t */, const char* /* g */, 16 const char* /* s */) { 17 UNIMPLEMENTED("PyCodec_Decode"); 18} 19 20PY_EXPORT PyObject* PyCodec_Decoder(const char* /* g */) { 21 UNIMPLEMENTED("PyCodec_Decoder"); 22} 23 24PY_EXPORT PyObject* PyCodec_Encode(PyObject* /* t */, const char* /* g */, 25 const char* /* s */) { 26 UNIMPLEMENTED("PyCodec_Encode"); 27} 28 29PY_EXPORT PyObject* PyCodec_Encoder(const char* /* g */) { 30 UNIMPLEMENTED("PyCodec_Encoder"); 31} 32 33PY_EXPORT PyObject* PyCodec_IgnoreErrors(PyObject* /* c */) { 34 UNIMPLEMENTED("PyCodec_IgnoreErrors"); 35} 36 37static PyObject* makeIncrementalCodec(PyObject* codec_info, const char* errors, 38 const char* attrname) { 39 PyObject* inc_codec = PyObject_GetAttrString(codec_info, attrname); 40 if (inc_codec == nullptr) return nullptr; 41 PyObject* ret = nullptr; 42 if (errors) { 43 ret = PyObject_CallFunction(inc_codec, "s", errors); 44 } else { 45 ret = PyObject_CallFunction(inc_codec, nullptr); 46 } 47 Py_DECREF(inc_codec); 48 return ret; 49} 50 51PY_EXPORT PyObject* _PyCodecInfo_GetIncrementalDecoder(PyObject* codec_info, 52 const char* errors) { 53 return makeIncrementalCodec(codec_info, errors, "incrementaldecoder"); 54} 55 56PY_EXPORT PyObject* PyCodec_IncrementalDecoder(const char* /* g */, 57 const char* /* s */) { 58 UNIMPLEMENTED("PyCodec_IncrementalDecoder"); 59} 60 61PY_EXPORT PyObject* _PyCodecInfo_GetIncrementalEncoder(PyObject* codec_info, 62 const char* errors) { 63 return makeIncrementalCodec(codec_info, errors, "incrementalencoder"); 64} 65 66PY_EXPORT PyObject* PyCodec_IncrementalEncoder(const char* /* g */, 67 const char* /* s */) { 68 UNIMPLEMENTED("PyCodec_IncrementalEncoder"); 69} 70 71PY_EXPORT int PyCodec_KnownEncoding(const char* /* g */) { 72 UNIMPLEMENTED("PyCodec_KnownEncoding"); 73} 74 75PY_EXPORT PyObject* _PyCodec_LookupTextEncoding(const char* encoding, 76 const char* alternate_command) { 77 Thread* thread = Thread::current(); 78 Runtime* runtime = thread->runtime(); 79 HandleScope scope(thread); 80 Str encoding_str(&scope, runtime->newStrFromCStr(encoding)); 81 Str alt_command(&scope, runtime->newStrFromCStr(alternate_command)); 82 Object result(&scope, thread->invokeFunction2(ID(_codecs), ID(_lookup_text), 83 encoding_str, alt_command)); 84 if (result.isError()) { 85 if (result.isErrorNotFound()) { 86 thread->raiseWithFmt(LayoutId::kSystemError, 87 "could not call _codecs.lookup"); 88 } 89 return nullptr; 90 } 91 return ApiHandle::newReference(runtime, *result); 92} 93 94PY_EXPORT PyObject* PyCodec_LookupError(const char* /* e */) { 95 UNIMPLEMENTED("PyCodec_LookupError"); 96} 97 98PY_EXPORT PyObject* PyCodec_NameReplaceErrors(PyObject* /* c */) { 99 UNIMPLEMENTED("PyCodec_NameReplaceErrors"); 100} 101 102PY_EXPORT int PyCodec_Register(PyObject* /* n */) { 103 UNIMPLEMENTED("PyCodec_Register"); 104} 105 106PY_EXPORT int PyCodec_RegisterError(const char* /* e */, PyObject* /* r */) { 107 UNIMPLEMENTED("PyCodec_RegisterError"); 108} 109 110PY_EXPORT PyObject* PyCodec_ReplaceErrors(PyObject* /* c */) { 111 UNIMPLEMENTED("PyCodec_ReplaceErrors"); 112} 113 114PY_EXPORT PyObject* PyCodec_StreamReader(const char* /* g */, PyObject* /* m */, 115 const char* /* s */) { 116 UNIMPLEMENTED("PyCodec_StreamReader"); 117} 118 119PY_EXPORT PyObject* PyCodec_StreamWriter(const char* /* g */, PyObject* /* m */, 120 const char* /* s */) { 121 UNIMPLEMENTED("PyCodec_StreamWriter"); 122} 123 124PY_EXPORT PyObject* PyCodec_StrictErrors(PyObject* exc) { 125 DCHECK(exc != nullptr, "exception should not be null"); 126 Thread* thread = Thread::current(); 127 HandleScope scope(thread); 128 Object exc_obj(&scope, ApiHandle::asObject(ApiHandle::fromPyObject(exc))); 129 Object result( 130 &scope, thread->invokeFunction1(ID(_codecs), ID(strict_errors), exc_obj)); 131 if (result.isErrorNotFound()) { 132 thread->raiseWithFmt(LayoutId::kTypeError, 133 "could not call _codecs.strict_errors"); 134 } 135 return nullptr; 136} 137 138PY_EXPORT PyObject* PyCodec_XMLCharRefReplaceErrors(PyObject* /* c */) { 139 UNIMPLEMENTED("PyCodec_XMLCharRefReplaceErrors"); 140} 141 142} // namespace py