1 | // core.h: Replacement for core/*.py
|
2 |
|
3 | #ifndef CORE_H
|
4 | #define CORE_H
|
5 |
|
6 | #include <pwd.h> // passwd
|
7 | #include <termios.h>
|
8 |
|
9 | #include "_gen/frontend/syntax.asdl.h"
|
10 | #include "cpp/pgen2.h"
|
11 | #include "mycpp/runtime.h"
|
12 |
|
13 | // Hacky forward declaration
|
14 | namespace completion {
|
15 | class RootCompleter;
|
16 | };
|
17 |
|
18 | namespace pyos {
|
19 |
|
20 | const int TERM_ICANON = ICANON;
|
21 | const int TERM_ECHO = ECHO;
|
22 | const int EOF_SENTINEL = 256;
|
23 | const int NEWLINE_CH = 10;
|
24 |
|
25 | Tuple2<int, int> WaitPid(int waitpid_options);
|
26 | Tuple2<int, int> Read(int fd, int n, List<BigStr*>* chunks);
|
27 | Tuple2<int, int> ReadByte(int fd);
|
28 | BigStr* ReadLineBuffered();
|
29 | Dict<BigStr*, BigStr*>* Environ();
|
30 | int Chdir(BigStr* dest_dir);
|
31 | BigStr* GetMyHomeDir();
|
32 | BigStr* GetHomeDir(BigStr* user_name);
|
33 |
|
34 | class ReadError {
|
35 | public:
|
36 | explicit ReadError(int err_num_) : err_num(err_num_) {
|
37 | }
|
38 |
|
39 | static constexpr ObjHeader obj_header() {
|
40 | return ObjHeader::ClassFixed(kZeroMask, sizeof(ReadError));
|
41 | }
|
42 |
|
43 | int err_num;
|
44 | };
|
45 |
|
46 | class PasswdEntry {
|
47 | public:
|
48 | explicit PasswdEntry(const passwd* entry)
|
49 | : pw_name(StrFromC(entry->pw_name)),
|
50 | pw_uid(entry->pw_uid),
|
51 | pw_gid(entry->pw_gid) {
|
52 | }
|
53 |
|
54 | static constexpr ObjHeader obj_header() {
|
55 | return ObjHeader::ClassFixed(field_mask(), sizeof(PasswdEntry));
|
56 | }
|
57 |
|
58 | BigStr* pw_name;
|
59 | int pw_uid;
|
60 | int pw_gid;
|
61 |
|
62 | static constexpr uint32_t field_mask() {
|
63 | return maskbit(offsetof(PasswdEntry, pw_name));
|
64 | }
|
65 | };
|
66 |
|
67 | List<PasswdEntry*>* GetAllUsers();
|
68 |
|
69 | BigStr* GetUserName(int uid);
|
70 |
|
71 | BigStr* OsType();
|
72 |
|
73 | Tuple2<mops::BigInt, mops::BigInt> GetRLimit(int resource);
|
74 |
|
75 | void SetRLimit(int resource, mops::BigInt soft, mops::BigInt hard);
|
76 |
|
77 | Tuple3<double, double, double> Time();
|
78 |
|
79 | void PrintTimes();
|
80 |
|
81 | bool InputAvailable(int fd);
|
82 |
|
83 | IOError_OSError* FlushStdout();
|
84 |
|
85 | Tuple2<int, void*> PushTermAttrs(int fd, int mask);
|
86 | void PopTermAttrs(int fd, int orig_local_modes, void* term_attrs);
|
87 |
|
88 | Tuple2<BigStr*, int>* MakeDirCacheKey(BigStr* path);
|
89 |
|
90 | } // namespace pyos
|
91 |
|
92 | namespace pyutil {
|
93 |
|
94 | double infinity();
|
95 | double nan();
|
96 |
|
97 | bool IsValidCharEscape(BigStr* c);
|
98 | BigStr* ChArrayToString(List<int>* ch_array);
|
99 |
|
100 | class _ResourceLoader {
|
101 | public:
|
102 | _ResourceLoader() {
|
103 | }
|
104 |
|
105 | virtual BigStr* Get(BigStr* path);
|
106 |
|
107 | static constexpr ObjHeader obj_header() {
|
108 | return ObjHeader::ClassFixed(kZeroMask, sizeof(_ResourceLoader));
|
109 | }
|
110 | };
|
111 |
|
112 | _ResourceLoader* GetResourceLoader();
|
113 |
|
114 | BigStr* GetVersion(_ResourceLoader* loader);
|
115 |
|
116 | void PrintVersionDetails(_ResourceLoader* loader);
|
117 |
|
118 | BigStr* strerror(IOError_OSError* e);
|
119 |
|
120 | BigStr* BackslashEscape(BigStr* s, BigStr* meta_chars);
|
121 |
|
122 | grammar::Grammar* LoadYshGrammar(_ResourceLoader*);
|
123 |
|
124 | } // namespace pyutil
|
125 |
|
126 | #endif // CORE_H
|