ci: add more byteptr/&byte compatibility shims to smooth the transition to &byte
parent
519c7194d7
commit
43d83717e7
|
@ -11,22 +11,25 @@ module picohttpparser
|
|||
|
||||
struct C.phr_header {
|
||||
pub:
|
||||
name charptr
|
||||
name &char
|
||||
name_len int
|
||||
value charptr
|
||||
value &char
|
||||
value_len int
|
||||
}
|
||||
|
||||
type PPchar = &&char
|
||||
|
||||
struct C.phr_header_t {}
|
||||
|
||||
fn C.phr_parse_request(buf charptr, len size_t, method &charptr, method_len &size_t, path &charptr, path_len &size_t, minor_version &int, headers &C.phr_header, num_headers &size_t, last_len size_t) int
|
||||
fn C.phr_parse_request(buf &char, len size_t, method PPchar, method_len &size_t, path PPchar, path_len &size_t, minor_version &int, headers &C.phr_header, num_headers &size_t, last_len size_t) int
|
||||
|
||||
fn C.phr_parse_response(buf charptr, len size_t, minor_version &int, status &int, msg &charptr, msg_len &size_t, headers &C.phr_header, num_headers &size_t, last_len size_t) int
|
||||
fn C.phr_parse_response(buf &char, len size_t, minor_version &int, status &int, msg PPchar, msg_len &size_t, headers &C.phr_header, num_headers &size_t, last_len size_t) int
|
||||
|
||||
fn C.phr_parse_headers(buf charptr, len size_t, headers &C.phr_header, num_headers &size_t, last_len size_t) int
|
||||
fn C.phr_parse_headers(buf &char, len size_t, headers &C.phr_header, num_headers &size_t, last_len size_t) int
|
||||
|
||||
fn C.phr_parse_request_path(buf_start &char, len size_t, method PPchar, method_len &size_t, path PPchar, path_len &size_t) int
|
||||
fn C.phr_parse_request_path_pipeline(buf_start &char, len size_t, method PPchar, method_len &size_t, path PPchar, path_len &size_t) int
|
||||
fn C.get_date() &byte
|
||||
|
||||
fn C.phr_parse_request_path(buf_start charptr, len size_t, method &charptr, method_len &size_t, path &charptr, path_len &size_t) int
|
||||
fn C.phr_parse_request_path_pipeline(buf_start charptr, len size_t, method &charptr, method_len &size_t, path &charptr, path_len &size_t) int
|
||||
fn C.get_date() byteptr
|
||||
// char * u64toa(uint64_t value, char *buffer)
|
||||
fn C.u64toa(value u64, buffer charptr) charptr
|
||||
fn C.u64toa(buffer &char, value u64) &char
|
||||
|
|
|
@ -2,16 +2,13 @@ module picohttpparser
|
|||
|
||||
pub struct Request {
|
||||
pub mut:
|
||||
method string
|
||||
path string
|
||||
headers[100] C.phr_header
|
||||
method string
|
||||
path string
|
||||
headers [100]C.phr_header
|
||||
num_headers u64
|
||||
body string
|
||||
body string
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
[inline]
|
||||
pub fn (mut r Request) parse_request(s string, max_headers int) int {
|
||||
method_len := u64(0)
|
||||
|
@ -19,14 +16,8 @@ pub fn (mut r Request) parse_request(s string, max_headers int) int {
|
|||
minor_version := 0
|
||||
num_headers := u64(max_headers)
|
||||
|
||||
pret := C.phr_parse_request(
|
||||
s.str, s.len,
|
||||
&r.method.str, &method_len,
|
||||
&r.path.str, &path_len,
|
||||
&minor_version,
|
||||
&r.headers[0], &num_headers,
|
||||
0
|
||||
)
|
||||
pret := C.phr_parse_request(s.str, s.len, PPchar(&r.method.str), &method_len, PPchar(&r.path.str),
|
||||
&path_len, &minor_version, &r.headers[0], &num_headers, 0)
|
||||
if pret > 0 {
|
||||
unsafe {
|
||||
r.method = tos(r.method.str, int(method_len))
|
||||
|
@ -42,11 +33,8 @@ pub fn (mut r Request) parse_request_path(s string) int {
|
|||
method_len := u64(0)
|
||||
path_len := u64(0)
|
||||
|
||||
pret := C.phr_parse_request_path(
|
||||
s.str, s.len,
|
||||
&r.method.str, &method_len,
|
||||
&r.path.str, &path_len
|
||||
)
|
||||
pret := C.phr_parse_request_path(s.str, s.len, PPchar(&r.method.str), &method_len,
|
||||
PPchar(&r.path.str), &path_len)
|
||||
if pret > 0 {
|
||||
unsafe {
|
||||
r.method = tos(r.method.str, int(method_len))
|
||||
|
@ -61,11 +49,8 @@ pub fn (mut r Request) parse_request_path_pipeline(s string) int {
|
|||
method_len := u64(0)
|
||||
path_len := u64(0)
|
||||
|
||||
pret := C.phr_parse_request_path_pipeline(
|
||||
s.str, s.len,
|
||||
&r.method.str, &method_len,
|
||||
&r.path.str, &path_len
|
||||
)
|
||||
pret := C.phr_parse_request_path_pipeline(s.str, s.len, PPchar(&r.method.str), &method_len,
|
||||
PPchar(&r.path.str), &path_len)
|
||||
if pret > 0 {
|
||||
unsafe {
|
||||
r.method = tos(r.method.str, int(method_len))
|
||||
|
|
|
@ -50,17 +50,35 @@ pub fn (mut c Checker) check_expected_call_arg(got ast.Type, expected_ ast.Type,
|
|||
if c.check_types(got, expected) {
|
||||
return
|
||||
}
|
||||
igot := int(got)
|
||||
iexpected := int(expected)
|
||||
if (igot == ast.byteptr_type_idx && iexpected == 65545)
|
||||
|| (iexpected == ast.byteptr_type_idx && igot == 65545) {
|
||||
idx_got := got.idx()
|
||||
idx_expected := expected.idx()
|
||||
if idx_got in [ ast.byteptr_type_idx, ast.charptr_type_idx] || idx_expected in [ast.byteptr_type_idx, ast.charptr_type_idx] {
|
||||
igot := int(got)
|
||||
iexpected := int(expected)
|
||||
// TODO: remove; transitional compatibility for byteptr === &byte
|
||||
return
|
||||
}
|
||||
if (igot == ast.charptr_type_idx && iexpected == 65551)
|
||||
|| (iexpected == ast.charptr_type_idx && igot == 65545) {
|
||||
if (igot == ast.byteptr_type_idx && iexpected == 65545)
|
||||
|| (iexpected == ast.byteptr_type_idx && igot == 65545) {
|
||||
return
|
||||
}
|
||||
// TODO: remove; transitional compatibility for charptr === &char
|
||||
return
|
||||
if (igot == ast.charptr_type_idx && iexpected == 65551)
|
||||
|| (iexpected == ast.charptr_type_idx && igot == 65551) {
|
||||
return
|
||||
}
|
||||
muls_got := got.nr_muls()
|
||||
muls_expected := expected.nr_muls()
|
||||
if idx_got == ast.byteptr_type_idx && idx_expected == ast.byte_type_idx && muls_got + 1 == muls_expected {
|
||||
return
|
||||
}
|
||||
if idx_expected == ast.byteptr_type_idx && idx_got == ast.byte_type_idx && muls_expected + 1 == muls_got {
|
||||
return
|
||||
}
|
||||
if idx_got == ast.charptr_type_idx && idx_expected == ast.char_type_idx && muls_got + 1 == muls_expected {
|
||||
return
|
||||
}
|
||||
if idx_expected == ast.charptr_type_idx && idx_got == ast.char_type_idx && muls_expected + 1 == muls_got {
|
||||
return
|
||||
}
|
||||
}
|
||||
return error('cannot use `${c.table.type_to_str(got.clear_flag(.variadic))}` as `${c.table.type_to_str(expected.clear_flag(.variadic))}`')
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue