this repo has no description
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