mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 03:20:18 +00:00
a lot of rename
This commit is contained in:
parent
bb2dfe61dc
commit
9c7d1c5fe1
@ -17,11 +17,11 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
#define SMALLMAP_T__HEADER
|
#define SMALLMAP_T__HEADER
|
||||||
#define K c11_stringview
|
#define K c11_sv
|
||||||
#define V uint16_t
|
#define V uint16_t
|
||||||
#define NAME c11_smallmap_s2n
|
#define NAME c11_smallmap_s2n
|
||||||
#define less(a, b) (c11_string__cmp((a), (b)) < 0)
|
#define less(a, b) (c11_sv__cmp((a), (b)) < 0)
|
||||||
#define equal(a, b) (c11_string__cmp((a), (b)) == 0)
|
#define equal(a, b) (c11_sv__cmp((a), (b)) == 0)
|
||||||
#include "pocketpy/xmacros/smallmap.h"
|
#include "pocketpy/xmacros/smallmap.h"
|
||||||
#undef SMALLMAP_T__HEADER
|
#undef SMALLMAP_T__HEADER
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ void pk_SStream__write_int(pk_SStream* self, int);
|
|||||||
void pk_SStream__write_i64(pk_SStream* self, int64_t);
|
void pk_SStream__write_i64(pk_SStream* self, int64_t);
|
||||||
void pk_SStream__write_f64(pk_SStream* self, double, int precision);
|
void pk_SStream__write_f64(pk_SStream* self, double, int precision);
|
||||||
void pk_SStream__write_char(pk_SStream* self, char);
|
void pk_SStream__write_char(pk_SStream* self, char);
|
||||||
void pk_SStream__write_sv(pk_SStream* self, c11_stringview);
|
void pk_SStream__write_sv(pk_SStream* self, c11_sv);
|
||||||
void pk_SStream__write_cstr(pk_SStream* self, const char*);
|
void pk_SStream__write_cstr(pk_SStream* self, const char*);
|
||||||
void pk_SStream__write_cstrn(pk_SStream* self, const char*, int);
|
void pk_SStream__write_cstrn(pk_SStream* self, const char*, int);
|
||||||
void pk_SStream__write_hex(pk_SStream* self, unsigned char, bool non_zero);
|
void pk_SStream__write_hex(pk_SStream* self, unsigned char, bool non_zero);
|
||||||
|
@ -10,14 +10,14 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* string_view */
|
/* string_view */
|
||||||
typedef struct c11_stringview{
|
typedef struct c11_sv{
|
||||||
const char* data;
|
const char* data;
|
||||||
int size;
|
int size;
|
||||||
} c11_stringview;
|
} c11_sv;
|
||||||
|
|
||||||
int c11_string__cmp(c11_stringview self, c11_stringview other);
|
int c11_sv__cmp(c11_sv self, c11_sv other);
|
||||||
int c11_string__cmp2(c11_stringview self, const char* other, int size);
|
int c11_sv__cmp2(c11_sv self, const char* other, int size);
|
||||||
int c11_string__cmp3(c11_stringview self, const char* other);
|
int c11_sv__cmp3(c11_sv self, const char* other);
|
||||||
|
|
||||||
// int size | char[] | '\0'
|
// int size | char[] | '\0'
|
||||||
typedef const char c11_string;
|
typedef const char c11_string;
|
||||||
@ -27,26 +27,26 @@ c11_string* c11_string__new2(const char* data, int size);
|
|||||||
c11_string* c11_string__copy(c11_string* self);
|
c11_string* c11_string__copy(c11_string* self);
|
||||||
void c11_string__delete(c11_string* self);
|
void c11_string__delete(c11_string* self);
|
||||||
int c11_string__len(c11_string* self);
|
int c11_string__len(c11_string* self);
|
||||||
c11_stringview c11_string__view(c11_string* self);
|
c11_sv c11_string__view(c11_string* self);
|
||||||
c11_string* c11_string__replace(c11_string* self, char old, char new_);
|
c11_string* c11_string__replace(c11_string* self, char old, char new_);
|
||||||
|
|
||||||
int c11_string__u8_length(const c11_string* self);
|
int c11_string__u8_length(const c11_string* self);
|
||||||
c11_stringview c11_string__u8_getitem(c11_string* self, int i);
|
c11_sv c11_string__u8_getitem(c11_string* self, int i);
|
||||||
c11_string* c11_string__u8_slice(c11_string* self, int start, int stop, int step);
|
c11_string* c11_string__u8_slice(c11_string* self, int start, int stop, int step);
|
||||||
|
|
||||||
// general string operations
|
// general string operations
|
||||||
void c11_sv__quote(c11_stringview sv, char quote, c11_vector* buf);
|
void c11_sv__quote(c11_sv sv, char quote, c11_vector* buf);
|
||||||
void c11_sv__lower(c11_stringview sv, c11_vector* buf);
|
void c11_sv__lower(c11_sv sv, c11_vector* buf);
|
||||||
void c11_sv__upper(c11_stringview sv, c11_vector* buf);
|
void c11_sv__upper(c11_sv sv, c11_vector* buf);
|
||||||
c11_stringview c11_sv__slice(c11_stringview sv, int start);
|
c11_sv c11_sv__slice(c11_sv sv, int start);
|
||||||
c11_stringview c11_sv__slice2(c11_stringview sv, int start, int stop);
|
c11_sv c11_sv__slice2(c11_sv sv, int start, int stop);
|
||||||
c11_stringview c11_sv__strip(c11_stringview sv, bool left, bool right);
|
c11_sv c11_sv__strip(c11_sv sv, bool left, bool right);
|
||||||
int c11_sv__index(c11_stringview self, char c);
|
int c11_sv__index(c11_sv self, char c);
|
||||||
int c11_sv__index2(c11_stringview self, c11_stringview sub, int start);
|
int c11_sv__index2(c11_sv self, c11_sv sub, int start);
|
||||||
int c11_sv__count(c11_stringview self, c11_stringview sub);
|
int c11_sv__count(c11_sv self, c11_sv sub);
|
||||||
|
|
||||||
c11_vector/* T=c11_stringview */ c11_sv__split(c11_stringview self, char sep);
|
c11_vector/* T=c11_sv */ c11_sv__split(c11_sv self, char sep);
|
||||||
c11_vector/* T=c11_stringview */ c11_sv__split2(c11_stringview self, c11_stringview sep);
|
c11_vector/* T=c11_sv */ c11_sv__split2(c11_sv self, c11_sv sep);
|
||||||
|
|
||||||
// misc
|
// misc
|
||||||
int c11__unicode_index_to_byte(const char* data, int i);
|
int c11__unicode_index_to_byte(const char* data, int i);
|
||||||
|
@ -11,9 +11,9 @@ extern "C" {
|
|||||||
typedef uint16_t StrName;
|
typedef uint16_t StrName;
|
||||||
|
|
||||||
uint16_t pk_StrName__map(const char*);
|
uint16_t pk_StrName__map(const char*);
|
||||||
uint16_t pk_StrName__map2(c11_stringview);
|
uint16_t pk_StrName__map2(c11_sv);
|
||||||
const char* pk_StrName__rmap(uint16_t index);
|
const char* pk_StrName__rmap(uint16_t index);
|
||||||
c11_stringview pk_StrName__rmap2(uint16_t index);
|
c11_sv pk_StrName__rmap2(uint16_t index);
|
||||||
|
|
||||||
void pk_StrName__initialize();
|
void pk_StrName__initialize();
|
||||||
void pk_StrName__finalize();
|
void pk_StrName__finalize();
|
||||||
|
@ -93,7 +93,7 @@ typedef enum IntParsingResult{
|
|||||||
IntParsing_OVERFLOW,
|
IntParsing_OVERFLOW,
|
||||||
} IntParsingResult;
|
} IntParsingResult;
|
||||||
|
|
||||||
IntParsingResult parse_uint(c11_stringview text, int64_t* out, int base);
|
IntParsingResult parse_uint(c11_sv text, int64_t* out, int base);
|
||||||
|
|
||||||
typedef struct Error Error;
|
typedef struct Error Error;
|
||||||
|
|
||||||
@ -103,7 +103,7 @@ Error* pk_Lexer__process(pk_SourceData_ src, pk_TokenArray* out_tokens);
|
|||||||
Error* pk_Lexer__process_and_dump(pk_SourceData_ src, c11_string** out_string);
|
Error* pk_Lexer__process_and_dump(pk_SourceData_ src, c11_string** out_string);
|
||||||
void pk_TokenArray__dtor(pk_TokenArray* self);
|
void pk_TokenArray__dtor(pk_TokenArray* self);
|
||||||
|
|
||||||
#define Token__sv(self) (c11_stringview){(self)->start, (self)->length}
|
#define Token__sv(self) (c11_sv){(self)->start, (self)->length}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -87,7 +87,7 @@ typedef struct CodeObject {
|
|||||||
int end_line;
|
int end_line;
|
||||||
} CodeObject;
|
} CodeObject;
|
||||||
|
|
||||||
void CodeObject__ctor(CodeObject* self, pk_SourceData_ src, c11_stringview name);
|
void CodeObject__ctor(CodeObject* self, pk_SourceData_ src, c11_sv name);
|
||||||
void CodeObject__dtor(CodeObject* self);
|
void CodeObject__dtor(CodeObject* self);
|
||||||
void CodeObject__gc_mark(const CodeObject* self);
|
void CodeObject__gc_mark(const CodeObject* self);
|
||||||
|
|
||||||
@ -116,7 +116,7 @@ typedef struct FuncDecl {
|
|||||||
|
|
||||||
typedef FuncDecl* FuncDecl_;
|
typedef FuncDecl* FuncDecl_;
|
||||||
|
|
||||||
FuncDecl_ FuncDecl__rcnew(pk_SourceData_ src, c11_stringview name);
|
FuncDecl_ FuncDecl__rcnew(pk_SourceData_ src, c11_sv name);
|
||||||
void FuncDecl__dtor(FuncDecl* self);
|
void FuncDecl__dtor(FuncDecl* self);
|
||||||
void FuncDecl__add_kwarg(FuncDecl* self, int index, uint16_t key, const py_TValue* value);
|
void FuncDecl__add_kwarg(FuncDecl* self, int index, uint16_t key, const py_TValue* value);
|
||||||
void FuncDecl__gc_mark(const FuncDecl* self);
|
void FuncDecl__gc_mark(const FuncDecl* self);
|
||||||
|
@ -9,10 +9,10 @@
|
|||||||
|
|
||||||
|
|
||||||
#define SMALLMAP_T__SOURCE
|
#define SMALLMAP_T__SOURCE
|
||||||
#define K c11_stringview
|
#define K c11_sv
|
||||||
#define V uint16_t
|
#define V uint16_t
|
||||||
#define NAME c11_smallmap_s2n
|
#define NAME c11_smallmap_s2n
|
||||||
#define less(a, b) (c11_string__cmp((a), (b)) < 0)
|
#define less(a, b) (c11_sv__cmp((a), (b)) < 0)
|
||||||
#define equal(a, b) (c11_string__cmp((a), (b)) == 0)
|
#define equal(a, b) (c11_sv__cmp((a), (b)) == 0)
|
||||||
#include "pocketpy/xmacros/smallmap.h"
|
#include "pocketpy/xmacros/smallmap.h"
|
||||||
#undef SMALLMAP_T__SOURCE
|
#undef SMALLMAP_T__SOURCE
|
||||||
|
@ -64,7 +64,7 @@ void pk_SStream__write_f64(pk_SStream* self, double val, int precision) {
|
|||||||
if(all_is_digit) pk_SStream__write_cstr(self, ".0");
|
if(all_is_digit) pk_SStream__write_cstr(self, ".0");
|
||||||
}
|
}
|
||||||
|
|
||||||
void pk_SStream__write_sv(pk_SStream* self, c11_stringview sv) {
|
void pk_SStream__write_sv(pk_SStream* self, c11_sv sv) {
|
||||||
pk_SStream__write_cstrn(self, sv.data, sv.size);
|
pk_SStream__write_cstrn(self, sv.data, sv.size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,7 +146,7 @@ void pk_vsprintf(pk_SStream* ss, const char* fmt, va_list args) {
|
|||||||
}
|
}
|
||||||
case 'q': {
|
case 'q': {
|
||||||
const char* s = va_arg(args, const char*);
|
const char* s = va_arg(args, const char*);
|
||||||
c11_stringview sv = {s, strlen(s)};
|
c11_sv sv = {s, strlen(s)};
|
||||||
c11_sv__quote(sv, '\'', &ss->data);
|
c11_sv__quote(sv, '\'', &ss->data);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -36,9 +36,9 @@ int c11_string__len(c11_string* self) {
|
|||||||
return *p;
|
return *p;
|
||||||
}
|
}
|
||||||
|
|
||||||
c11_stringview c11_string__view(c11_string* self) {
|
c11_sv c11_string__view(c11_string* self) {
|
||||||
int* p = (int*)self - 1;
|
int* p = (int*)self - 1;
|
||||||
return (c11_stringview){self, *p};
|
return (c11_sv){self, *p};
|
||||||
}
|
}
|
||||||
|
|
||||||
c11_string* c11_string__replace(c11_string* self, char old, char new_) {
|
c11_string* c11_string__replace(c11_string* self, char old, char new_) {
|
||||||
@ -56,7 +56,7 @@ int c11_string__u8_length(c11_string* self) {
|
|||||||
return c11__byte_index_to_unicode(self, size);
|
return c11__byte_index_to_unicode(self, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
c11_stringview c11_string__u8_getitem(c11_string* self, int i) {
|
c11_sv c11_string__u8_getitem(c11_string* self, int i) {
|
||||||
i = c11__unicode_index_to_byte(self, i);
|
i = c11__unicode_index_to_byte(self, i);
|
||||||
int size = c11__u8_header(self[i], false);
|
int size = c11__u8_header(self[i], false);
|
||||||
return c11_sv__slice2(c11_string__view(self), i, i + size);
|
return c11_sv__slice2(c11_string__view(self), i, i + size);
|
||||||
@ -67,14 +67,14 @@ c11_string* c11_string__u8_slice(c11_string* self, int start, int stop, int step
|
|||||||
pk_SStream__ctor(&ss);
|
pk_SStream__ctor(&ss);
|
||||||
assert(step != 0);
|
assert(step != 0);
|
||||||
for(int i = start; step > 0 ? i < stop : i > stop; i += step) {
|
for(int i = start; step > 0 ? i < stop : i > stop; i += step) {
|
||||||
c11_stringview unicode = c11_string__u8_getitem(self, i);
|
c11_sv unicode = c11_string__u8_getitem(self, i);
|
||||||
pk_SStream__write_sv(&ss, unicode);
|
pk_SStream__write_sv(&ss, unicode);
|
||||||
}
|
}
|
||||||
return pk_SStream__submit(&ss);
|
return pk_SStream__submit(&ss);
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////
|
/////////////////////////////////////////
|
||||||
void c11_sv__quote(c11_stringview sv, char quote, c11_vector* buf) {
|
void c11_sv__quote(c11_sv sv, char quote, c11_vector* buf) {
|
||||||
assert(quote == '"' || quote == '\'');
|
assert(quote == '"' || quote == '\'');
|
||||||
c11_vector__push(char, buf, quote);
|
c11_vector__push(char, buf, quote);
|
||||||
for(int i = 0; i < sv.size; i++) {
|
for(int i = 0; i < sv.size; i++) {
|
||||||
@ -103,7 +103,7 @@ void c11_sv__quote(c11_stringview sv, char quote, c11_vector* buf) {
|
|||||||
c11_vector__push(char, buf, quote);
|
c11_vector__push(char, buf, quote);
|
||||||
}
|
}
|
||||||
|
|
||||||
void c11_sv__lower(c11_stringview sv, c11_vector* buf) {
|
void c11_sv__lower(c11_sv sv, c11_vector* buf) {
|
||||||
for(int i = 0; i < sv.size; i++) {
|
for(int i = 0; i < sv.size; i++) {
|
||||||
char c = sv.data[i];
|
char c = sv.data[i];
|
||||||
if('A' <= c && c <= 'Z') c += 32;
|
if('A' <= c && c <= 'Z') c += 32;
|
||||||
@ -111,7 +111,7 @@ void c11_sv__lower(c11_stringview sv, c11_vector* buf) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void c11_sv__upper(c11_stringview sv, c11_vector* buf) {
|
void c11_sv__upper(c11_sv sv, c11_vector* buf) {
|
||||||
for(int i = 0; i < sv.size; i++) {
|
for(int i = 0; i < sv.size; i++) {
|
||||||
char c = sv.data[i];
|
char c = sv.data[i];
|
||||||
if('a' <= c && c <= 'z') c -= 32;
|
if('a' <= c && c <= 'z') c -= 32;
|
||||||
@ -119,16 +119,16 @@ void c11_sv__upper(c11_stringview sv, c11_vector* buf) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
c11_stringview c11_sv__slice(c11_stringview sv, int start) {
|
c11_sv c11_sv__slice(c11_sv sv, int start) {
|
||||||
return c11_sv__slice2(sv, start, sv.size);
|
return c11_sv__slice2(sv, start, sv.size);
|
||||||
}
|
}
|
||||||
|
|
||||||
c11_stringview c11_sv__slice2(c11_stringview sv, int start, int stop) {
|
c11_sv c11_sv__slice2(c11_sv sv, int start, int stop) {
|
||||||
if(stop < start) stop = start;
|
if(stop < start) stop = start;
|
||||||
return (c11_stringview){sv.data + start, stop - start};
|
return (c11_sv){sv.data + start, stop - start};
|
||||||
}
|
}
|
||||||
|
|
||||||
c11_stringview c11_sv__strip(c11_stringview sv, bool left, bool right) {
|
c11_sv c11_sv__strip(c11_sv sv, bool left, bool right) {
|
||||||
int L = 0;
|
int L = 0;
|
||||||
int R = sv.size;
|
int R = sv.size;
|
||||||
const char* data = sv.data;
|
const char* data = sv.data;
|
||||||
@ -144,14 +144,14 @@ c11_stringview c11_sv__strip(c11_stringview sv, bool left, bool right) {
|
|||||||
return c11_sv__slice2(sv, L, R);
|
return c11_sv__slice2(sv, L, R);
|
||||||
}
|
}
|
||||||
|
|
||||||
int c11_sv__index(c11_stringview self, char c) {
|
int c11_sv__index(c11_sv self, char c) {
|
||||||
for(int i = 0; i < self.size; i++) {
|
for(int i = 0; i < self.size; i++) {
|
||||||
if(self.data[i] == c) return i;
|
if(self.data[i] == c) return i;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int c11_sv__index2(c11_stringview self, c11_stringview sub, int start) {
|
int c11_sv__index2(c11_sv self, c11_sv sub, int start) {
|
||||||
if(sub.size == 0) return start;
|
if(sub.size == 0) return start;
|
||||||
int max_end = self.size - sub.size;
|
int max_end = self.size - sub.size;
|
||||||
for(int i = start; i <= max_end; i++) {
|
for(int i = start; i <= max_end; i++) {
|
||||||
@ -161,7 +161,7 @@ int c11_sv__index2(c11_stringview self, c11_stringview sub, int start) {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int c11_sv__count(c11_stringview self, c11_stringview sub) {
|
int c11_sv__count(c11_sv self, c11_sv sub) {
|
||||||
if(sub.size == 0) return self.size + 1;
|
if(sub.size == 0) return self.size + 1;
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
int start = 0;
|
int start = 0;
|
||||||
@ -174,42 +174,42 @@ int c11_sv__count(c11_stringview self, c11_stringview sub) {
|
|||||||
return cnt;
|
return cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
c11_vector /* T=c11_stringview */ c11_sv__split(c11_stringview self, char sep) {
|
c11_vector /* T=c11_sv */ c11_sv__split(c11_sv self, char sep) {
|
||||||
c11_vector retval;
|
c11_vector retval;
|
||||||
c11_vector__ctor(&retval, sizeof(c11_stringview));
|
c11_vector__ctor(&retval, sizeof(c11_sv));
|
||||||
const char* data = self.data;
|
const char* data = self.data;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for(int j = 0; j < self.size; j++) {
|
for(int j = 0; j < self.size; j++) {
|
||||||
if(data[j] == sep) {
|
if(data[j] == sep) {
|
||||||
if(j > i) {
|
if(j > i) {
|
||||||
c11_stringview tmp = {data + i, j - i};
|
c11_sv tmp = {data + i, j - i};
|
||||||
c11_vector__push(c11_stringview, &retval, tmp);
|
c11_vector__push(c11_sv, &retval, tmp);
|
||||||
}
|
}
|
||||||
i = j + 1;
|
i = j + 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(self.size > i) {
|
if(self.size > i) {
|
||||||
c11_stringview tmp = {data + i, self.size - i};
|
c11_sv tmp = {data + i, self.size - i};
|
||||||
c11_vector__push(c11_stringview, &retval, tmp);
|
c11_vector__push(c11_sv, &retval, tmp);
|
||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
c11_vector /* T=c11_stringview */ c11_sv__split2(c11_stringview self, c11_stringview sep) {
|
c11_vector /* T=c11_sv */ c11_sv__split2(c11_sv self, c11_sv sep) {
|
||||||
c11_vector retval;
|
c11_vector retval;
|
||||||
c11_vector__ctor(&retval, sizeof(c11_stringview));
|
c11_vector__ctor(&retval, sizeof(c11_sv));
|
||||||
int start = 0;
|
int start = 0;
|
||||||
const char* data = self.data;
|
const char* data = self.data;
|
||||||
while(true) {
|
while(true) {
|
||||||
int i = c11_sv__index2(self, sep, start);
|
int i = c11_sv__index2(self, sep, start);
|
||||||
if(i == -1) break;
|
if(i == -1) break;
|
||||||
c11_stringview tmp = {data + start, i - start};
|
c11_sv tmp = {data + start, i - start};
|
||||||
if(tmp.size != 0) c11_vector__push(c11_stringview, &retval, tmp);
|
if(tmp.size != 0) c11_vector__push(c11_sv, &retval, tmp);
|
||||||
start = i + sep.size;
|
start = i + sep.size;
|
||||||
}
|
}
|
||||||
c11_stringview tmp = {data + start, self.size - start};
|
c11_sv tmp = {data + start, self.size - start};
|
||||||
if(tmp.size != 0) c11_vector__push(c11_stringview, &retval, tmp);
|
if(tmp.size != 0) c11_vector__push(c11_sv, &retval, tmp);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -232,18 +232,18 @@ int c11__byte_index_to_unicode(const char* data, int n) {
|
|||||||
|
|
||||||
//////////////
|
//////////////
|
||||||
|
|
||||||
int c11_string__cmp(c11_stringview self, c11_stringview other) {
|
int c11_sv__cmp(c11_sv self, c11_sv other) {
|
||||||
return c11_string__cmp2(self, other.data, other.size);
|
return c11_sv__cmp2(self, other.data, other.size);
|
||||||
}
|
}
|
||||||
|
|
||||||
int c11_string__cmp2(c11_stringview self, const char* other, int size) {
|
int c11_sv__cmp2(c11_sv self, const char* other, int size) {
|
||||||
int res = strncmp(self.data, other, PK_MIN(self.size, size));
|
int res = strncmp(self.data, other, PK_MIN(self.size, size));
|
||||||
if(res != 0) return res;
|
if(res != 0) return res;
|
||||||
return self.size - size;
|
return self.size - size;
|
||||||
}
|
}
|
||||||
|
|
||||||
int c11_string__cmp3(c11_stringview self, const char* other) {
|
int c11_sv__cmp3(c11_sv self, const char* other) {
|
||||||
return c11_string__cmp2(self, other, strlen(other));
|
return c11_sv__cmp2(self, other, strlen(other));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ void pk_StrName__initialize() {
|
|||||||
for(int i = 0; i < _r_interned.count; i++) {
|
for(int i = 0; i < _r_interned.count; i++) {
|
||||||
free(c11__at(char*, &_r_interned, i));
|
free(c11__at(char*, &_r_interned, i));
|
||||||
}
|
}
|
||||||
c11_vector__ctor(&_r_interned, sizeof(c11_stringview));
|
c11_vector__ctor(&_r_interned, sizeof(c11_sv));
|
||||||
_initialized = true;
|
_initialized = true;
|
||||||
|
|
||||||
#define MAGIC_METHOD(x) x = pk_StrName__map(#x);
|
#define MAGIC_METHOD(x) x = pk_StrName__map(#x);
|
||||||
@ -46,10 +46,10 @@ void pk_StrName__finalize() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint16_t pk_StrName__map(const char* name) {
|
uint16_t pk_StrName__map(const char* name) {
|
||||||
return pk_StrName__map2((c11_stringview){name, strlen(name)});
|
return pk_StrName__map2((c11_sv){name, strlen(name)});
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t pk_StrName__map2(c11_stringview name) {
|
uint16_t pk_StrName__map2(c11_sv name) {
|
||||||
// TODO: PK_GLOBAL_SCOPE_LOCK()
|
// TODO: PK_GLOBAL_SCOPE_LOCK()
|
||||||
if(!_initialized) {
|
if(!_initialized) {
|
||||||
pk_StrName__initialize(); // lazy init
|
pk_StrName__initialize(); // lazy init
|
||||||
@ -65,7 +65,7 @@ uint16_t pk_StrName__map2(c11_stringview name) {
|
|||||||
c11_vector__push(char*, &_r_interned, p);
|
c11_vector__push(char*, &_r_interned, p);
|
||||||
index = _r_interned.count; // 1-based
|
index = _r_interned.count; // 1-based
|
||||||
// save to _interned
|
// save to _interned
|
||||||
c11_smallmap_s2n__set(&_interned, (c11_stringview){p, name.size}, index);
|
c11_smallmap_s2n__set(&_interned, (c11_sv){p, name.size}, index);
|
||||||
assert(_interned.count == _r_interned.count);
|
assert(_interned.count == _r_interned.count);
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
@ -76,9 +76,9 @@ const char* pk_StrName__rmap(uint16_t index) {
|
|||||||
return c11__getitem(char*, &_r_interned, index - 1);
|
return c11__getitem(char*, &_r_interned, index - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
c11_stringview pk_StrName__rmap2(uint16_t index) {
|
c11_sv pk_StrName__rmap2(uint16_t index) {
|
||||||
const char* p = pk_StrName__rmap(index);
|
const char* p = pk_StrName__rmap(index);
|
||||||
return (c11_stringview){p, strlen(p)};
|
return (c11_sv){p, strlen(p)};
|
||||||
}
|
}
|
||||||
|
|
||||||
py_Name py_name(const char* name) {
|
py_Name py_name(const char* name) {
|
||||||
|
@ -83,7 +83,7 @@ void Ctx__patch_jump(Ctx* self, int index);
|
|||||||
bool Ctx__add_label(Ctx* self, StrName name);
|
bool Ctx__add_label(Ctx* self, StrName name);
|
||||||
int Ctx__add_varname(Ctx* self, StrName name);
|
int Ctx__add_varname(Ctx* self, StrName name);
|
||||||
int Ctx__add_const(Ctx* self, py_Ref);
|
int Ctx__add_const(Ctx* self, py_Ref);
|
||||||
int Ctx__add_const_string(Ctx* self, c11_stringview);
|
int Ctx__add_const_string(Ctx* self, c11_sv);
|
||||||
void Ctx__emit_store_name(Ctx* self, NameScope scope, StrName name, int line);
|
void Ctx__emit_store_name(Ctx* self, NameScope scope, StrName name, int line);
|
||||||
void Ctx__try_merge_for_iter_store(Ctx* self, int);
|
void Ctx__try_merge_for_iter_store(Ctx* self, int);
|
||||||
void Ctx__s_emit_top(Ctx*); // emit top -> pop -> delete
|
void Ctx__s_emit_top(Ctx*); // emit top -> pop -> delete
|
||||||
@ -222,7 +222,7 @@ UnaryExpr* UnaryExpr__new(int line, Expr* child, Opcode opcode) {
|
|||||||
|
|
||||||
typedef struct RawStringExpr {
|
typedef struct RawStringExpr {
|
||||||
EXPR_COMMON_HEADER
|
EXPR_COMMON_HEADER
|
||||||
c11_stringview value;
|
c11_sv value;
|
||||||
Opcode opcode;
|
Opcode opcode;
|
||||||
} RawStringExpr;
|
} RawStringExpr;
|
||||||
|
|
||||||
@ -233,7 +233,7 @@ void RawStringExpr__emit_(Expr* self_, Ctx* ctx) {
|
|||||||
Ctx__emit_(ctx, self->opcode, BC_NOARG, self->line);
|
Ctx__emit_(ctx, self->opcode, BC_NOARG, self->line);
|
||||||
}
|
}
|
||||||
|
|
||||||
RawStringExpr* RawStringExpr__new(int line, c11_stringview value, Opcode opcode) {
|
RawStringExpr* RawStringExpr__new(int line, c11_sv value, Opcode opcode) {
|
||||||
const static ExprVt Vt = {.emit_ = RawStringExpr__emit_};
|
const static ExprVt Vt = {.emit_ = RawStringExpr__emit_};
|
||||||
static_assert_expr_size(RawStringExpr);
|
static_assert_expr_size(RawStringExpr);
|
||||||
RawStringExpr* self = PoolExpr_alloc();
|
RawStringExpr* self = PoolExpr_alloc();
|
||||||
@ -289,7 +289,7 @@ void LiteralExpr__emit_(Expr* self_, Ctx* ctx) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TokenValue_STR: {
|
case TokenValue_STR: {
|
||||||
c11_stringview sv = c11_string__view(self->value->_str);
|
c11_sv sv = c11_string__view(self->value->_str);
|
||||||
int index = Ctx__add_const_string(ctx, sv);
|
int index = Ctx__add_const_string(ctx, sv);
|
||||||
Ctx__emit_(ctx, OP_LOAD_CONST, index, self->line);
|
Ctx__emit_(ctx, OP_LOAD_CONST, index, self->line);
|
||||||
break;
|
break;
|
||||||
@ -585,7 +585,7 @@ LambdaExpr* LambdaExpr__new(int line, int index) {
|
|||||||
|
|
||||||
typedef struct FStringExpr {
|
typedef struct FStringExpr {
|
||||||
EXPR_COMMON_HEADER
|
EXPR_COMMON_HEADER
|
||||||
c11_stringview src;
|
c11_sv src;
|
||||||
} FStringExpr;
|
} FStringExpr;
|
||||||
|
|
||||||
static bool is_fmt_valid_char(char c) {
|
static bool is_fmt_valid_char(char c) {
|
||||||
@ -601,7 +601,7 @@ static bool is_fmt_valid_char(char c) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_identifier(c11_stringview s) {
|
static bool is_identifier(c11_sv s) {
|
||||||
if(s.size == 0) return false;
|
if(s.size == 0) return false;
|
||||||
if(!isalpha(s.data[0]) && s.data[0] != '_') return false;
|
if(!isalpha(s.data[0]) && s.data[0] != '_') return false;
|
||||||
for(int i = 0; i < s.size; i++) {
|
for(int i = 0; i < s.size; i++) {
|
||||||
@ -611,7 +611,7 @@ static bool is_identifier(c11_stringview s) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _load_simple_expr(Ctx* ctx, c11_stringview expr, int line) {
|
static void _load_simple_expr(Ctx* ctx, c11_sv expr, int line) {
|
||||||
bool repr = false;
|
bool repr = false;
|
||||||
const char* expr_end = expr.data + expr.size;
|
const char* expr_end = expr.data + expr.size;
|
||||||
if(expr.size >= 2 && expr_end[-2] == '!') {
|
if(expr.size >= 2 && expr_end[-2] == '!') {
|
||||||
@ -636,8 +636,8 @@ static void _load_simple_expr(Ctx* ctx, c11_stringview expr, int line) {
|
|||||||
} else {
|
} else {
|
||||||
int dot = c11_sv__index(expr, '.');
|
int dot = c11_sv__index(expr, '.');
|
||||||
if(dot > 0) {
|
if(dot > 0) {
|
||||||
c11_stringview a = {expr.data, dot}; // expr[:dot]
|
c11_sv a = {expr.data, dot}; // expr[:dot]
|
||||||
c11_stringview b = {expr.data + (dot + 1), expr.size - (dot + 1)}; // expr[dot+1:]
|
c11_sv b = {expr.data + (dot + 1), expr.size - (dot + 1)}; // expr[dot+1:]
|
||||||
if(is_identifier(a) && is_identifier(b)) {
|
if(is_identifier(a) && is_identifier(b)) {
|
||||||
Ctx__emit_(ctx, OP_LOAD_NAME, pk_StrName__map2(a), line);
|
Ctx__emit_(ctx, OP_LOAD_NAME, pk_StrName__map2(a), line);
|
||||||
Ctx__emit_(ctx, OP_LOAD_ATTR, pk_StrName__map2(b), line);
|
Ctx__emit_(ctx, OP_LOAD_ATTR, pk_StrName__map2(b), line);
|
||||||
@ -666,11 +666,11 @@ static void FStringExpr__emit_(Expr* self_, Ctx* ctx) {
|
|||||||
if(flag) {
|
if(flag) {
|
||||||
if(src[j] == '}') {
|
if(src[j] == '}') {
|
||||||
// add expression
|
// add expression
|
||||||
c11_stringview expr = {src + i, j - i}; // src[i:j]
|
c11_sv expr = {src + i, j - i}; // src[i:j]
|
||||||
// BUG: ':' is not a format specifier in f"{stack[2:]}"
|
// BUG: ':' is not a format specifier in f"{stack[2:]}"
|
||||||
int conon = c11_sv__index(expr, ':');
|
int conon = c11_sv__index(expr, ':');
|
||||||
if(conon >= 0) {
|
if(conon >= 0) {
|
||||||
c11_stringview spec = {expr.data + (conon + 1),
|
c11_sv spec = {expr.data + (conon + 1),
|
||||||
expr.size - (conon + 1)}; // expr[conon+1:]
|
expr.size - (conon + 1)}; // expr[conon+1:]
|
||||||
// filter some invalid spec
|
// filter some invalid spec
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
@ -707,7 +707,7 @@ static void FStringExpr__emit_(Expr* self_, Ctx* ctx) {
|
|||||||
j++;
|
j++;
|
||||||
Ctx__emit_(ctx,
|
Ctx__emit_(ctx,
|
||||||
OP_LOAD_CONST,
|
OP_LOAD_CONST,
|
||||||
Ctx__add_const_string(ctx, (c11_stringview){"{", 1}),
|
Ctx__add_const_string(ctx, (c11_sv){"{", 1}),
|
||||||
self->line);
|
self->line);
|
||||||
count++;
|
count++;
|
||||||
} else {
|
} else {
|
||||||
@ -722,7 +722,7 @@ static void FStringExpr__emit_(Expr* self_, Ctx* ctx) {
|
|||||||
j++;
|
j++;
|
||||||
Ctx__emit_(ctx,
|
Ctx__emit_(ctx,
|
||||||
OP_LOAD_CONST,
|
OP_LOAD_CONST,
|
||||||
Ctx__add_const_string(ctx, (c11_stringview){"}", 1}),
|
Ctx__add_const_string(ctx, (c11_sv){"}", 1}),
|
||||||
self->line);
|
self->line);
|
||||||
count++;
|
count++;
|
||||||
} else {
|
} else {
|
||||||
@ -735,7 +735,7 @@ static void FStringExpr__emit_(Expr* self_, Ctx* ctx) {
|
|||||||
i = j;
|
i = j;
|
||||||
while(j < self->src.size && src[j] != '{' && src[j] != '}')
|
while(j < self->src.size && src[j] != '{' && src[j] != '}')
|
||||||
j++;
|
j++;
|
||||||
c11_stringview literal = {src + i, j - i}; // src[i:j]
|
c11_sv literal = {src + i, j - i}; // src[i:j]
|
||||||
Ctx__emit_(ctx, OP_LOAD_CONST, Ctx__add_const_string(ctx, literal), self->line);
|
Ctx__emit_(ctx, OP_LOAD_CONST, Ctx__add_const_string(ctx, literal), self->line);
|
||||||
count++;
|
count++;
|
||||||
continue; // skip j++
|
continue; // skip j++
|
||||||
@ -746,14 +746,14 @@ static void FStringExpr__emit_(Expr* self_, Ctx* ctx) {
|
|||||||
|
|
||||||
if(flag) {
|
if(flag) {
|
||||||
// literal
|
// literal
|
||||||
c11_stringview literal = {src + i, self->src.size - i}; // src[i:]
|
c11_sv literal = {src + i, self->src.size - i}; // src[i:]
|
||||||
Ctx__emit_(ctx, OP_LOAD_CONST, Ctx__add_const_string(ctx, literal), self->line);
|
Ctx__emit_(ctx, OP_LOAD_CONST, Ctx__add_const_string(ctx, literal), self->line);
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
Ctx__emit_(ctx, OP_BUILD_STRING, count, self->line);
|
Ctx__emit_(ctx, OP_BUILD_STRING, count, self->line);
|
||||||
}
|
}
|
||||||
|
|
||||||
FStringExpr* FStringExpr__new(int line, c11_stringview src) {
|
FStringExpr* FStringExpr__new(int line, c11_sv src) {
|
||||||
const static ExprVt Vt = {.emit_ = FStringExpr__emit_};
|
const static ExprVt Vt = {.emit_ = FStringExpr__emit_};
|
||||||
static_assert_expr_size(FStringExpr);
|
static_assert_expr_size(FStringExpr);
|
||||||
FStringExpr* self = PoolExpr_alloc();
|
FStringExpr* self = PoolExpr_alloc();
|
||||||
@ -1344,7 +1344,7 @@ int Ctx__add_varname(Ctx* self, StrName name) {
|
|||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Ctx__add_const_string(Ctx* self, c11_stringview key) {
|
int Ctx__add_const_string(Ctx* self, c11_sv key) {
|
||||||
uint16_t* val = c11_smallmap_s2n__try_get(&self->co_consts_string_dedup_map, key);
|
uint16_t* val = c11_smallmap_s2n__try_get(&self->co_consts_string_dedup_map, key);
|
||||||
if(val) {
|
if(val) {
|
||||||
return *val;
|
return *val;
|
||||||
@ -1659,19 +1659,19 @@ static Error* exprLiteral(Compiler* self) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static Error* exprLong(Compiler* self) {
|
static Error* exprLong(Compiler* self) {
|
||||||
c11_stringview sv = Token__sv(prev());
|
c11_sv sv = Token__sv(prev());
|
||||||
Ctx__s_push(ctx(), (Expr*)RawStringExpr__new(prev()->line, sv, OP_BUILD_LONG));
|
Ctx__s_push(ctx(), (Expr*)RawStringExpr__new(prev()->line, sv, OP_BUILD_LONG));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Error* exprBytes(Compiler* self) {
|
static Error* exprBytes(Compiler* self) {
|
||||||
c11_stringview sv = c11_string__view(prev()->value._str);
|
c11_sv sv = c11_string__view(prev()->value._str);
|
||||||
Ctx__s_push(ctx(), (Expr*)RawStringExpr__new(prev()->line, sv, OP_BUILD_BYTES));
|
Ctx__s_push(ctx(), (Expr*)RawStringExpr__new(prev()->line, sv, OP_BUILD_BYTES));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Error* exprFString(Compiler* self) {
|
static Error* exprFString(Compiler* self) {
|
||||||
c11_stringview sv = c11_string__view(prev()->value._str);
|
c11_sv sv = c11_string__view(prev()->value._str);
|
||||||
Ctx__s_push(ctx(), (Expr*)FStringExpr__new(prev()->line, sv));
|
Ctx__s_push(ctx(), (Expr*)FStringExpr__new(prev()->line, sv));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ CodeObject* Compiler::push_global_context() noexcept{
|
|||||||
return co;
|
return co;
|
||||||
}
|
}
|
||||||
|
|
||||||
FuncDecl_ Compiler::push_f_context(c11_stringview name, int* out_index) noexcept{
|
FuncDecl_ Compiler::push_f_context(c11_sv name, int* out_index) noexcept{
|
||||||
FuncDecl_ decl = FuncDecl__rcnew(lexer.src, name);
|
FuncDecl_ decl = FuncDecl__rcnew(lexer.src, name);
|
||||||
decl->code->start_line = __i == 0 ? 1 : prev().line;
|
decl->code->start_line = __i == 0 ? 1 : prev().line;
|
||||||
decl->nested = name_scope() == NAME_LOCAL;
|
decl->nested = name_scope() == NAME_LOCAL;
|
||||||
|
@ -28,7 +28,7 @@ typedef struct TokenDeserializer {
|
|||||||
|
|
||||||
void TokenDeserializer__ctor(TokenDeserializer* self, const char* source);
|
void TokenDeserializer__ctor(TokenDeserializer* self, const char* source);
|
||||||
bool TokenDeserializer__match_char(TokenDeserializer* self, char c);
|
bool TokenDeserializer__match_char(TokenDeserializer* self, char c);
|
||||||
c11_stringview TokenDeserializer__read_string(TokenDeserializer* self, char c);
|
c11_sv TokenDeserializer__read_string(TokenDeserializer* self, char c);
|
||||||
c11_string* TokenDeserializer__read_string_from_hex(TokenDeserializer* self, char c);
|
c11_string* TokenDeserializer__read_string_from_hex(TokenDeserializer* self, char c);
|
||||||
int TokenDeserializer__read_count(TokenDeserializer* self);
|
int TokenDeserializer__read_count(TokenDeserializer* self);
|
||||||
int64_t TokenDeserializer__read_uint(TokenDeserializer* self, char c);
|
int64_t TokenDeserializer__read_uint(TokenDeserializer* self, char c);
|
||||||
@ -243,14 +243,14 @@ static Error* eat_name(pk_Lexer* self){
|
|||||||
|
|
||||||
int length = (int)(self->curr_char - self->token_start);
|
int length = (int)(self->curr_char - self->token_start);
|
||||||
if(length == 0) return SyntaxError("@id contains invalid char");
|
if(length == 0) return SyntaxError("@id contains invalid char");
|
||||||
c11_stringview name = {self->token_start, length};
|
c11_sv name = {self->token_start, length};
|
||||||
|
|
||||||
if(self->src->mode == JSON_MODE) {
|
if(self->src->mode == JSON_MODE) {
|
||||||
if(c11_string__cmp3(name, "true") == 0) {
|
if(c11_sv__cmp3(name, "true") == 0) {
|
||||||
add_token(self, TK_TRUE);
|
add_token(self, TK_TRUE);
|
||||||
} else if(c11_string__cmp3(name, "false") == 0) {
|
} else if(c11_sv__cmp3(name, "false") == 0) {
|
||||||
add_token(self, TK_FALSE);
|
add_token(self, TK_FALSE);
|
||||||
} else if(c11_string__cmp3(name, "null") == 0) {
|
} else if(c11_sv__cmp3(name, "null") == 0) {
|
||||||
add_token(self, TK_NONE);
|
add_token(self, TK_NONE);
|
||||||
} else {
|
} else {
|
||||||
return SyntaxError("invalid JSON token");
|
return SyntaxError("invalid JSON token");
|
||||||
@ -260,12 +260,12 @@ static Error* eat_name(pk_Lexer* self){
|
|||||||
|
|
||||||
const char** KW_BEGIN = pk_TokenSymbols + TK_FALSE;
|
const char** KW_BEGIN = pk_TokenSymbols + TK_FALSE;
|
||||||
int KW_COUNT = TK__COUNT__ - TK_FALSE;
|
int KW_COUNT = TK__COUNT__ - TK_FALSE;
|
||||||
#define less(a, b) (c11_string__cmp3(b, a) > 0)
|
#define less(a, b) (c11_sv__cmp3(b, a) > 0)
|
||||||
int out;
|
int out;
|
||||||
c11__lower_bound(const char*, KW_BEGIN, KW_COUNT, name, less, &out);
|
c11__lower_bound(const char*, KW_BEGIN, KW_COUNT, name, less, &out);
|
||||||
#undef less
|
#undef less
|
||||||
|
|
||||||
if(out != KW_COUNT && c11_string__cmp3(name, KW_BEGIN[out]) == 0) {
|
if(out != KW_COUNT && c11_sv__cmp3(name, KW_BEGIN[out]) == 0) {
|
||||||
add_token(self, (TokenIndex)(out + TK_FALSE));
|
add_token(self, (TokenIndex)(out + TK_FALSE));
|
||||||
} else {
|
} else {
|
||||||
add_token(self, TK_ID);
|
add_token(self, TK_ID);
|
||||||
@ -361,7 +361,7 @@ static Error* eat_number(pk_Lexer* self){
|
|||||||
is_scientific_notation = true;
|
is_scientific_notation = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
c11_stringview text = {self->token_start, i - self->token_start};
|
c11_sv text = {self->token_start, i - self->token_start};
|
||||||
self->curr_char = i;
|
self->curr_char = i;
|
||||||
|
|
||||||
if(text.data[0] != '.' && !is_scientific_notation) {
|
if(text.data[0] != '.' && !is_scientific_notation) {
|
||||||
@ -552,9 +552,9 @@ static Error* from_precompiled(pk_Lexer* self) {
|
|||||||
TokenDeserializer__ctor(&deserializer, self->src->source);
|
TokenDeserializer__ctor(&deserializer, self->src->source);
|
||||||
|
|
||||||
deserializer.curr += 5; // skip "pkpy:"
|
deserializer.curr += 5; // skip "pkpy:"
|
||||||
c11_stringview version = TokenDeserializer__read_string(&deserializer, '\n');
|
c11_sv version = TokenDeserializer__read_string(&deserializer, '\n');
|
||||||
|
|
||||||
if(c11_string__cmp3(version, PK_VERSION) != 0) {
|
if(c11_sv__cmp3(version, PK_VERSION) != 0) {
|
||||||
return SyntaxError("precompiled version mismatch");
|
return SyntaxError("precompiled version mismatch");
|
||||||
}
|
}
|
||||||
if(TokenDeserializer__read_uint(&deserializer, '\n') != (int64_t)self->src->mode){
|
if(TokenDeserializer__read_uint(&deserializer, '\n') != (int64_t)self->src->mode){
|
||||||
@ -564,7 +564,7 @@ static Error* from_precompiled(pk_Lexer* self) {
|
|||||||
int count = TokenDeserializer__read_count(&deserializer);
|
int count = TokenDeserializer__read_count(&deserializer);
|
||||||
c11_vector* precompiled_tokens = &self->src->_precompiled_tokens;
|
c11_vector* precompiled_tokens = &self->src->_precompiled_tokens;
|
||||||
for(int i = 0; i < count; i++) {
|
for(int i = 0; i < count; i++) {
|
||||||
c11_stringview item = TokenDeserializer__read_string(&deserializer, '\n');
|
c11_sv item = TokenDeserializer__read_string(&deserializer, '\n');
|
||||||
c11_string* copied_item = c11_string__new2(item.data, item.size);
|
c11_string* copied_item = c11_string__new2(item.data, item.size);
|
||||||
c11_vector__push(c11_string*, precompiled_tokens, copied_item);
|
c11_vector__push(c11_string*, precompiled_tokens, copied_item);
|
||||||
}
|
}
|
||||||
@ -618,16 +618,16 @@ static Error* from_precompiled(pk_Lexer* self) {
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
IntParsingResult parse_uint(c11_stringview text, int64_t* out, int base) {
|
IntParsingResult parse_uint(c11_sv text, int64_t* out, int base) {
|
||||||
*out = 0;
|
*out = 0;
|
||||||
|
|
||||||
c11_stringview prefix = {.data = text.data, .size = PK_MIN(2, text.size)};
|
c11_sv prefix = {.data = text.data, .size = PK_MIN(2, text.size)};
|
||||||
if(base == -1) {
|
if(base == -1) {
|
||||||
if(c11_string__cmp3(prefix, "0b") == 0)
|
if(c11_sv__cmp3(prefix, "0b") == 0)
|
||||||
base = 2;
|
base = 2;
|
||||||
else if(c11_string__cmp3(prefix, "0o") == 0)
|
else if(c11_sv__cmp3(prefix, "0o") == 0)
|
||||||
base = 8;
|
base = 8;
|
||||||
else if(c11_string__cmp3(prefix, "0x") == 0)
|
else if(c11_sv__cmp3(prefix, "0x") == 0)
|
||||||
base = 16;
|
base = 16;
|
||||||
else
|
else
|
||||||
base = 10;
|
base = 10;
|
||||||
@ -649,9 +649,9 @@ IntParsingResult parse_uint(c11_stringview text, int64_t* out, int base) {
|
|||||||
return IntParsing_SUCCESS;
|
return IntParsing_SUCCESS;
|
||||||
} else if(base == 2) {
|
} else if(base == 2) {
|
||||||
// 2-base 0b101010
|
// 2-base 0b101010
|
||||||
if(c11_string__cmp3(prefix, "0b") == 0) {
|
if(c11_sv__cmp3(prefix, "0b") == 0) {
|
||||||
// text.remove_prefix(2);
|
// text.remove_prefix(2);
|
||||||
text = (c11_stringview){text.data + 2, text.size - 2};
|
text = (c11_sv){text.data + 2, text.size - 2};
|
||||||
}
|
}
|
||||||
if(text.size == 0) return IntParsing_FAILURE;
|
if(text.size == 0) return IntParsing_FAILURE;
|
||||||
for(int i = 0; i < text.size; i++) {
|
for(int i = 0; i < text.size; i++) {
|
||||||
@ -667,9 +667,9 @@ IntParsingResult parse_uint(c11_stringview text, int64_t* out, int base) {
|
|||||||
return IntParsing_SUCCESS;
|
return IntParsing_SUCCESS;
|
||||||
} else if(base == 8) {
|
} else if(base == 8) {
|
||||||
// 8-base 0o123
|
// 8-base 0o123
|
||||||
if(c11_string__cmp3(prefix, "0o") == 0) {
|
if(c11_sv__cmp3(prefix, "0o") == 0) {
|
||||||
// text.remove_prefix(2);
|
// text.remove_prefix(2);
|
||||||
text = (c11_stringview){text.data + 2, text.size - 2};
|
text = (c11_sv){text.data + 2, text.size - 2};
|
||||||
}
|
}
|
||||||
if(text.size == 0) return IntParsing_FAILURE;
|
if(text.size == 0) return IntParsing_FAILURE;
|
||||||
for(int i = 0; i < text.size; i++) {
|
for(int i = 0; i < text.size; i++) {
|
||||||
@ -685,9 +685,9 @@ IntParsingResult parse_uint(c11_stringview text, int64_t* out, int base) {
|
|||||||
return IntParsing_SUCCESS;
|
return IntParsing_SUCCESS;
|
||||||
} else if(base == 16) {
|
} else if(base == 16) {
|
||||||
// 16-base 0x123
|
// 16-base 0x123
|
||||||
if(c11_string__cmp3(prefix, "0x") == 0) {
|
if(c11_sv__cmp3(prefix, "0x") == 0) {
|
||||||
// text.remove_prefix(2);
|
// text.remove_prefix(2);
|
||||||
text = (c11_stringview){text.data + 2, text.size - 2};
|
text = (c11_sv){text.data + 2, text.size - 2};
|
||||||
}
|
}
|
||||||
if(text.size == 0) return IntParsing_FAILURE;
|
if(text.size == 0) return IntParsing_FAILURE;
|
||||||
for(int i = 0; i < text.size; i++) {
|
for(int i = 0; i < text.size; i++) {
|
||||||
@ -759,7 +759,7 @@ Error* pk_Lexer__process_and_dump(pk_SourceData_ src, c11_string** out) {
|
|||||||
|
|
||||||
c11__foreach(Token, &nexts, token) {
|
c11__foreach(Token, &nexts, token) {
|
||||||
if(is_raw_string_used(token->type)) {
|
if(is_raw_string_used(token->type)) {
|
||||||
c11_stringview token_sv = {token->start, token->length};
|
c11_sv token_sv = {token->start, token->length};
|
||||||
if(!c11_smallmap_s2n__contains(&token_indices, token_sv)) {
|
if(!c11_smallmap_s2n__contains(&token_indices, token_sv)) {
|
||||||
c11_smallmap_s2n__set(&token_indices, token_sv, 0);
|
c11_smallmap_s2n__set(&token_indices, token_sv, 0);
|
||||||
}
|
}
|
||||||
@ -790,7 +790,7 @@ Error* pk_Lexer__process_and_dump(pk_SourceData_ src, c11_string** out) {
|
|||||||
|
|
||||||
if(is_raw_string_used(token->type)) {
|
if(is_raw_string_used(token->type)) {
|
||||||
uint16_t *p = c11_smallmap_s2n__try_get(
|
uint16_t *p = c11_smallmap_s2n__try_get(
|
||||||
&token_indices, (c11_stringview){token->start, token->length});
|
&token_indices, (c11_sv){token->start, token->length});
|
||||||
assert(p != NULL);
|
assert(p != NULL);
|
||||||
pk_SStream__write_int(&ss, (int)*p);
|
pk_SStream__write_int(&ss, (int)*p);
|
||||||
pk_SStream__write_char(&ss, ',');
|
pk_SStream__write_char(&ss, ',');
|
||||||
@ -821,7 +821,7 @@ Error* pk_Lexer__process_and_dump(pk_SourceData_ src, c11_string** out) {
|
|||||||
break;
|
break;
|
||||||
case TokenValue_STR: {
|
case TokenValue_STR: {
|
||||||
pk_SStream__write_char(&ss, 'S');
|
pk_SStream__write_char(&ss, 'S');
|
||||||
c11_stringview sv = c11_string__view(token->value._str);
|
c11_sv sv = c11_string__view(token->value._str);
|
||||||
for(int i=0; i<sv.size; i++){
|
for(int i=0; i<sv.size; i++){
|
||||||
pk_SStream__write_hex(&ss, sv.data[i], false);
|
pk_SStream__write_hex(&ss, sv.data[i], false);
|
||||||
}
|
}
|
||||||
@ -882,17 +882,17 @@ bool TokenDeserializer__match_char(TokenDeserializer* self, char c){
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
c11_stringview TokenDeserializer__read_string(TokenDeserializer* self, char c){
|
c11_sv TokenDeserializer__read_string(TokenDeserializer* self, char c){
|
||||||
const char* start = self->curr;
|
const char* start = self->curr;
|
||||||
while(*self->curr != c)
|
while(*self->curr != c)
|
||||||
self->curr++;
|
self->curr++;
|
||||||
c11_stringview retval = {start, (int)(self->curr-start)};
|
c11_sv retval = {start, (int)(self->curr-start)};
|
||||||
self->curr++; // skip the delimiter
|
self->curr++; // skip the delimiter
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
c11_string* TokenDeserializer__read_string_from_hex(TokenDeserializer* self, char c){
|
c11_string* TokenDeserializer__read_string_from_hex(TokenDeserializer* self, char c){
|
||||||
c11_stringview sv = TokenDeserializer__read_string(self, c);
|
c11_sv sv = TokenDeserializer__read_string(self, c);
|
||||||
const char* s = sv.data;
|
const char* s = sv.data;
|
||||||
pk_SStream ss;
|
pk_SStream ss;
|
||||||
pk_SStream__ctor(&ss);
|
pk_SStream__ctor(&ss);
|
||||||
@ -933,7 +933,7 @@ int64_t TokenDeserializer__read_uint(TokenDeserializer* self, char c){
|
|||||||
}
|
}
|
||||||
|
|
||||||
double TokenDeserializer__read_float(TokenDeserializer* self, char c){
|
double TokenDeserializer__read_float(TokenDeserializer* self, char c){
|
||||||
c11_stringview sv = TokenDeserializer__read_string(self, c);
|
c11_sv sv = TokenDeserializer__read_string(self, c);
|
||||||
// TODO: optimize this
|
// TODO: optimize this
|
||||||
c11_string* nullterm = c11_string__new2(sv.data, sv.size);
|
c11_string* nullterm = c11_string__new2(sv.data, sv.size);
|
||||||
char* end;
|
char* end;
|
||||||
|
@ -13,7 +13,7 @@ bool Bytecode__is_forward_jump(const Bytecode* self) {
|
|||||||
return self->op >= OP_JUMP_FORWARD && self->op <= OP_LOOP_BREAK;
|
return self->op >= OP_JUMP_FORWARD && self->op <= OP_LOOP_BREAK;
|
||||||
}
|
}
|
||||||
|
|
||||||
FuncDecl_ FuncDecl__rcnew(pk_SourceData_ src, c11_stringview name) {
|
FuncDecl_ FuncDecl__rcnew(pk_SourceData_ src, c11_sv name) {
|
||||||
FuncDecl* self = malloc(sizeof(FuncDecl));
|
FuncDecl* self = malloc(sizeof(FuncDecl));
|
||||||
self->rc.count = 1;
|
self->rc.count = 1;
|
||||||
self->rc.dtor = (void (*)(void*))FuncDecl__dtor;
|
self->rc.dtor = (void (*)(void*))FuncDecl__dtor;
|
||||||
@ -46,7 +46,7 @@ void FuncDecl__add_kwarg(FuncDecl* self, int index, uint16_t key, const py_TValu
|
|||||||
c11_vector__push(FuncDeclKwArg, &self->kwargs, item);
|
c11_vector__push(FuncDeclKwArg, &self->kwargs, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CodeObject__ctor(CodeObject* self, pk_SourceData_ src, c11_stringview name) {
|
void CodeObject__ctor(CodeObject* self, pk_SourceData_ src, c11_sv name) {
|
||||||
self->src = src;
|
self->src = src;
|
||||||
PK_INCREF(src);
|
PK_INCREF(src);
|
||||||
self->name = c11_string__new2(name.data, name.size);
|
self->name = c11_string__new2(name.data, name.size);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user