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 | List<int>* WaitForInputs(List<int>* fds_in);
|
83 |
|
84 | IOError_OSError* FlushStdout();
|
85 |
|
86 | Tuple2<int, void*> PushTermAttrs(int fd, int mask);
|
87 | void PopTermAttrs(int fd, int orig_local_modes, void* term_attrs);
|
88 |
|
89 | Tuple2<BigStr*, int>* MakeDirCacheKey(BigStr* path);
|
90 |
|
91 | } // namespace pyos
|
92 |
|
93 | namespace pyutil {
|
94 |
|
95 | double infinity();
|
96 | double nan();
|
97 |
|
98 | bool IsValidCharEscape(BigStr* c);
|
99 | BigStr* ChArrayToString(List<int>* ch_array);
|
100 |
|
101 | class _ResourceLoader {
|
102 | public:
|
103 | _ResourceLoader() {
|
104 | }
|
105 |
|
106 | virtual BigStr* Get(BigStr* path);
|
107 |
|
108 | static constexpr ObjHeader obj_header() {
|
109 | return ObjHeader::ClassFixed(kZeroMask, sizeof(_ResourceLoader));
|
110 | }
|
111 | };
|
112 |
|
113 | _ResourceLoader* GetResourceLoader();
|
114 |
|
115 | BigStr* GetVersion(_ResourceLoader* loader);
|
116 |
|
117 | void PrintVersionDetails(_ResourceLoader* loader);
|
118 |
|
119 | BigStr* strerror(IOError_OSError* e);
|
120 |
|
121 | BigStr* BackslashEscape(BigStr* s, BigStr* meta_chars);
|
122 |
|
123 | grammar::Grammar* LoadYshGrammar(_ResourceLoader*);
|
124 |
|
125 | } // namespace pyutil
|
126 |
|
127 | #endif // CORE_H
|