mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Fix do on for loops
This commit is contained in:
+1
-3
@@ -14,8 +14,6 @@ new_c_string :: proc(s: string) -> ^u8 {
|
|||||||
|
|
||||||
to_odin_string :: proc(c: ^u8) -> string {
|
to_odin_string :: proc(c: ^u8) -> string {
|
||||||
len := 0;
|
len := 0;
|
||||||
for (c+len)^ != 0 {
|
for (c+len)^ != 0 do len++;
|
||||||
len++;
|
|
||||||
}
|
|
||||||
return string(slice_ptr(c, len));
|
return string(slice_ptr(c, len));
|
||||||
}
|
}
|
||||||
|
|||||||
+19
-19
@@ -1,5 +1,5 @@
|
|||||||
is_signed :: proc(info: ^TypeInfo) -> bool {
|
is_signed :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
match i in type_info_base(info) {
|
match i in type_info_base(info) {
|
||||||
case TypeInfo.Integer: return i.signed;
|
case TypeInfo.Integer: return i.signed;
|
||||||
case TypeInfo.Float: return true;
|
case TypeInfo.Float: return true;
|
||||||
@@ -7,92 +7,92 @@ is_signed :: proc(info: ^TypeInfo) -> bool {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
is_integer :: proc(info: ^TypeInfo) -> bool {
|
is_integer :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
_, ok := type_info_base(info).(^TypeInfo.Integer);
|
_, ok := type_info_base(info).(^TypeInfo.Integer);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
is_float :: proc(info: ^TypeInfo) -> bool {
|
is_float :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
_, ok := type_info_base(info).(^TypeInfo.Float);
|
_, ok := type_info_base(info).(^TypeInfo.Float);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
is_complex :: proc(info: ^TypeInfo) -> bool {
|
is_complex :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
_, ok := type_info_base(info).(^TypeInfo.Complex);
|
_, ok := type_info_base(info).(^TypeInfo.Complex);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
is_any :: proc(info: ^TypeInfo) -> bool {
|
is_any :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
_, ok := type_info_base(info).(^TypeInfo.Any);
|
_, ok := type_info_base(info).(^TypeInfo.Any);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
is_string :: proc(info: ^TypeInfo) -> bool {
|
is_string :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
_, ok := type_info_base(info).(^TypeInfo.String);
|
_, ok := type_info_base(info).(^TypeInfo.String);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
is_boolean :: proc(info: ^TypeInfo) -> bool {
|
is_boolean :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
_, ok := type_info_base(info).(^TypeInfo.Boolean);
|
_, ok := type_info_base(info).(^TypeInfo.Boolean);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
is_pointer :: proc(info: ^TypeInfo) -> bool {
|
is_pointer :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
_, ok := type_info_base(info).(^TypeInfo.Pointer);
|
_, ok := type_info_base(info).(^TypeInfo.Pointer);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
is_procedure :: proc(info: ^TypeInfo) -> bool {
|
is_procedure :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
_, ok := type_info_base(info).(^TypeInfo.Procedure);
|
_, ok := type_info_base(info).(^TypeInfo.Procedure);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
is_array :: proc(info: ^TypeInfo) -> bool {
|
is_array :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
_, ok := type_info_base(info).(^TypeInfo.Array);
|
_, ok := type_info_base(info).(^TypeInfo.Array);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
is_dynamic_array :: proc(info: ^TypeInfo) -> bool {
|
is_dynamic_array :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
_, ok := type_info_base(info).(^TypeInfo.DynamicArray);
|
_, ok := type_info_base(info).(^TypeInfo.DynamicArray);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
is_dynamic_map :: proc(info: ^TypeInfo) -> bool {
|
is_dynamic_map :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
_, ok := type_info_base(info).(^TypeInfo.Map);
|
_, ok := type_info_base(info).(^TypeInfo.Map);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
is_slice :: proc(info: ^TypeInfo) -> bool {
|
is_slice :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
_, ok := type_info_base(info).(^TypeInfo.Slice);
|
_, ok := type_info_base(info).(^TypeInfo.Slice);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
is_vector :: proc(info: ^TypeInfo) -> bool {
|
is_vector :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
_, ok := type_info_base(info).(^TypeInfo.Vector);
|
_, ok := type_info_base(info).(^TypeInfo.Vector);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
is_tuple :: proc(info: ^TypeInfo) -> bool {
|
is_tuple :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
_, ok := type_info_base(info).(^TypeInfo.Tuple);
|
_, ok := type_info_base(info).(^TypeInfo.Tuple);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
is_struct :: proc(info: ^TypeInfo) -> bool {
|
is_struct :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
_, ok := type_info_base(info).(^TypeInfo.Struct);
|
_, ok := type_info_base(info).(^TypeInfo.Struct);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
is_union :: proc(info: ^TypeInfo) -> bool {
|
is_union :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
_, ok := type_info_base(info).(^TypeInfo.Union);
|
_, ok := type_info_base(info).(^TypeInfo.Union);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
is_raw_union :: proc(info: ^TypeInfo) -> bool {
|
is_raw_union :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
_, ok := type_info_base(info).(^TypeInfo.RawUnion);
|
_, ok := type_info_base(info).(^TypeInfo.RawUnion);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
is_enum :: proc(info: ^TypeInfo) -> bool {
|
is_enum :: proc(info: ^TypeInfo) -> bool {
|
||||||
if info == nil { return false; }
|
if info == nil do return false;
|
||||||
_, ok := type_info_base(info).(^TypeInfo.Enum);
|
_, ok := type_info_base(info).(^TypeInfo.Enum);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-5
@@ -29,11 +29,7 @@ encode_surrogate_pair :: proc(r: rune) -> (r1, r2: rune) {
|
|||||||
|
|
||||||
encode :: proc(d: []u16, s: []rune) {
|
encode :: proc(d: []u16, s: []rune) {
|
||||||
n := len(s);
|
n := len(s);
|
||||||
for r in s {
|
for r in s do if r >= _surr_self do n++;
|
||||||
if r >= _surr_self {
|
|
||||||
n++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
max_n := min(len(d), n);
|
max_n := min(len(d), n);
|
||||||
n = 0;
|
n = 0;
|
||||||
|
|||||||
+3
-3
@@ -3971,7 +3971,8 @@ AstNode *parse_for_stmt(AstFile *f) {
|
|||||||
AstNode *body = NULL;
|
AstNode *body = NULL;
|
||||||
bool is_range = false;
|
bool is_range = false;
|
||||||
|
|
||||||
if (f->curr_token.kind != Token_OpenBrace) {
|
if (f->curr_token.kind != Token_OpenBrace &&
|
||||||
|
f->curr_token.kind != Token_do) {
|
||||||
isize prev_level = f->expr_level;
|
isize prev_level = f->expr_level;
|
||||||
f->expr_level = -1;
|
f->expr_level = -1;
|
||||||
if (f->curr_token.kind != Token_Semicolon) {
|
if (f->curr_token.kind != Token_Semicolon) {
|
||||||
@@ -3981,8 +3982,7 @@ AstNode *parse_for_stmt(AstFile *f) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_range && (f->curr_token.kind == Token_Semicolon ||
|
if (!is_range && f->curr_token.kind == Token_Semicolon) {
|
||||||
f->curr_token.kind == Token_do)) {
|
|
||||||
next_token(f);
|
next_token(f);
|
||||||
init = cond;
|
init = cond;
|
||||||
cond = NULL;
|
cond = NULL;
|
||||||
|
|||||||
Reference in New Issue
Block a user