mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 15:18:49 +00:00
Tilde: Add in/not_in for maps
This commit is contained in:
@@ -378,3 +378,8 @@ gb_internal cgValue cg_builtin_map_info(cgProcedure *p, Type *map_type);
|
|||||||
gb_internal cgValue cg_builtin_map_cell_info(cgProcedure *p, Type *type);
|
gb_internal cgValue cg_builtin_map_cell_info(cgProcedure *p, Type *type);
|
||||||
gb_internal cgValue cg_emit_source_code_location_as_global(cgProcedure *p, String const &proc_name, TokenPos pos);
|
gb_internal cgValue cg_emit_source_code_location_as_global(cgProcedure *p, String const &proc_name, TokenPos pos);
|
||||||
gb_internal cgValue cg_emit_source_code_location_as_global(cgProcedure *p, Ast *node);
|
gb_internal cgValue cg_emit_source_code_location_as_global(cgProcedure *p, Ast *node);
|
||||||
|
|
||||||
|
|
||||||
|
gb_internal cgValue cg_internal_dynamic_map_get_ptr(cgProcedure *p, cgValue const &map_ptr, cgValue const &key);
|
||||||
|
gb_internal void cg_internal_dynamic_map_set(cgProcedure *p, cgValue const &map_ptr, Type *map_type,
|
||||||
|
cgValue const &map_key, cgValue const &map_value, Ast *node);
|
||||||
+8
-9
@@ -2135,15 +2135,14 @@ gb_internal cgValue cg_build_binary_expr(cgProcedure *p, Ast *expr) {
|
|||||||
switch (rt->kind) {
|
switch (rt->kind) {
|
||||||
case Type_Map:
|
case Type_Map:
|
||||||
{
|
{
|
||||||
GB_PANIC("TODO(bill): in/not_in for maps");
|
cgValue map_ptr = cg_address_from_load_or_generate_local(p, right);
|
||||||
// cgValue map_ptr = cg_address_from_load_or_generate_local(p, right);
|
cgValue key = left;
|
||||||
// cgValue key = left;
|
cgValue ptr = cg_internal_dynamic_map_get_ptr(p, map_ptr, key);
|
||||||
// cgValue ptr = cg_internal_dynamic_map_get_ptr(p, map_ptr, key);
|
if (be->op.kind == Token_in) {
|
||||||
// if (be->op.kind == Token_in) {
|
return cg_emit_conv(p, cg_emit_comp_against_nil(p, Token_NotEq, ptr), t_bool);
|
||||||
// return cg_emit_conv(p, cg_emit_comp_against_nil(p, Token_NotEq, ptr), t_bool);
|
} else {
|
||||||
// } else {
|
return cg_emit_conv(p, cg_emit_comp_against_nil(p, Token_CmpEq, ptr), t_bool);
|
||||||
// return cg_emit_conv(p, cg_emit_comp_against_nil(p, Token_CmpEq, ptr), t_bool);
|
}
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Type_BitSet:
|
case Type_BitSet:
|
||||||
|
|||||||
Reference in New Issue
Block a user