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 {
|
struct C.phr_header {
|
||||||
pub:
|
pub:
|
||||||
name charptr
|
name &char
|
||||||
name_len int
|
name_len int
|
||||||
value charptr
|
value &char
|
||||||
value_len int
|
value_len int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type PPchar = &&char
|
||||||
|
|
||||||
struct C.phr_header_t {}
|
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)
|
// 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 struct Request {
|
||||||
pub mut:
|
pub mut:
|
||||||
method string
|
method string
|
||||||
path string
|
path string
|
||||||
headers[100] C.phr_header
|
headers [100]C.phr_header
|
||||||
num_headers u64
|
num_headers u64
|
||||||
body string
|
body string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[inline]
|
[inline]
|
||||||
pub fn (mut r Request) parse_request(s string, max_headers int) int {
|
pub fn (mut r Request) parse_request(s string, max_headers int) int {
|
||||||
method_len := u64(0)
|
method_len := u64(0)
|
||||||
|
@ -19,14 +16,8 @@ pub fn (mut r Request) parse_request(s string, max_headers int) int {
|
||||||
minor_version := 0
|
minor_version := 0
|
||||||
num_headers := u64(max_headers)
|
num_headers := u64(max_headers)
|
||||||
|
|
||||||
pret := C.phr_parse_request(
|
pret := C.phr_parse_request(s.str, s.len, PPchar(&r.method.str), &method_len, PPchar(&r.path.str),
|
||||||
s.str, s.len,
|
&path_len, &minor_version, &r.headers[0], &num_headers, 0)
|
||||||
&r.method.str, &method_len,
|
|
||||||
&r.path.str, &path_len,
|
|
||||||
&minor_version,
|
|
||||||
&r.headers[0], &num_headers,
|
|
||||||
0
|
|
||||||
)
|
|
||||||
if pret > 0 {
|
if pret > 0 {
|
||||||
unsafe {
|
unsafe {
|
||||||
r.method = tos(r.method.str, int(method_len))
|
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)
|
method_len := u64(0)
|
||||||
path_len := u64(0)
|
path_len := u64(0)
|
||||||
|
|
||||||
pret := C.phr_parse_request_path(
|
pret := C.phr_parse_request_path(s.str, s.len, PPchar(&r.method.str), &method_len,
|
||||||
s.str, s.len,
|
PPchar(&r.path.str), &path_len)
|
||||||
&r.method.str, &method_len,
|
|
||||||
&r.path.str, &path_len
|
|
||||||
)
|
|
||||||
if pret > 0 {
|
if pret > 0 {
|
||||||
unsafe {
|
unsafe {
|
||||||
r.method = tos(r.method.str, int(method_len))
|
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)
|
method_len := u64(0)
|
||||||
path_len := u64(0)
|
path_len := u64(0)
|
||||||
|
|
||||||
pret := C.phr_parse_request_path_pipeline(
|
pret := C.phr_parse_request_path_pipeline(s.str, s.len, PPchar(&r.method.str), &method_len,
|
||||||
s.str, s.len,
|
PPchar(&r.path.str), &path_len)
|
||||||
&r.method.str, &method_len,
|
|
||||||
&r.path.str, &path_len
|
|
||||||
)
|
|
||||||
if pret > 0 {
|
if pret > 0 {
|
||||||
unsafe {
|
unsafe {
|
||||||
r.method = tos(r.method.str, int(method_len))
|
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) {
|
if c.check_types(got, expected) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
igot := int(got)
|
idx_got := got.idx()
|
||||||
iexpected := int(expected)
|
idx_expected := expected.idx()
|
||||||
if (igot == ast.byteptr_type_idx && iexpected == 65545)
|
if idx_got in [ ast.byteptr_type_idx, ast.charptr_type_idx] || idx_expected in [ast.byteptr_type_idx, ast.charptr_type_idx] {
|
||||||
|| (iexpected == ast.byteptr_type_idx && igot == 65545) {
|
igot := int(got)
|
||||||
|
iexpected := int(expected)
|
||||||
// TODO: remove; transitional compatibility for byteptr === &byte
|
// TODO: remove; transitional compatibility for byteptr === &byte
|
||||||
return
|
if (igot == ast.byteptr_type_idx && iexpected == 65545)
|
||||||
}
|
|| (iexpected == ast.byteptr_type_idx && igot == 65545) {
|
||||||
if (igot == ast.charptr_type_idx && iexpected == 65551)
|
return
|
||||||
|| (iexpected == ast.charptr_type_idx && igot == 65545) {
|
}
|
||||||
// TODO: remove; transitional compatibility for charptr === &char
|
// 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))}`')
|
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