Skip to content

Commit 4f1b68e

Browse files
committed
assert_egal mechanism
1 parent b4b67bb commit 4f1b68e

File tree

5 files changed

+12
-3
lines changed

5 files changed

+12
-3
lines changed

base/compiler/ssair/ir.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,8 @@ function is_relevant_expr(e::Expr)
272272
return e.head in (:call, :invoke, :new, :(=), :(&),
273273
:gc_preserve_begin, :gc_preserve_end,
274274
:foreigncall, :isdefined, :copyast,
275-
:undefcheck, :throw_undef_if_not)
275+
:undefcheck, :throw_undef_if_not,
276+
:assert_egal)
276277
end
277278

278279
function setindex!(x::UseRef, @nospecialize(v))

base/compiler/validation.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ const VALID_EXPR_HEADS = IdDict{Any,Any}(
2828
:gc_preserve_begin => 0:typemax(Int),
2929
:gc_preserve_end => 0:typemax(Int),
3030
:thunk => 1:1,
31-
:throw_undef_if_not => 2:2
31+
:throw_undef_if_not => 2:2,
32+
:assert_egal => 2:2
3233
)
3334

3435
# @enum isn't defined yet, otherwise I'd use it for this

src/ast.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ jl_sym_t *macrocall_sym; jl_sym_t *colon_sym;
6767
jl_sym_t *hygienicscope_sym;
6868
jl_sym_t *escape_sym;
6969
jl_sym_t *gc_preserve_begin_sym; jl_sym_t *gc_preserve_end_sym;
70-
jl_sym_t *throw_undef_if_not_sym;
70+
jl_sym_t *throw_undef_if_not_sym; jl_sym_t *assert_egal_sym;
7171

7272
static uint8_t flisp_system_image[] = {
7373
#include <julia_flisp.boot.inc>
@@ -392,6 +392,7 @@ void jl_init_frontend(void)
392392
generated_sym = jl_symbol("generated");
393393
generated_only_sym = jl_symbol("generated_only");
394394
throw_undef_if_not_sym = jl_symbol("throw_undef_if_not");
395+
assert_egal_sym = jl_symbol("assert_egal");
395396
}
396397

397398
JL_DLLEXPORT void jl_lisp_prompt(void)

src/codegen.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3950,6 +3950,11 @@ static jl_cgval_t emit_expr(jl_codectx_t &ctx, jl_value_t *expr)
39503950
undef_var_error_ifnot(ctx, ctx.builder.CreateTrunc(cond, T_int1), (jl_sym_t*)args[0]);
39513951
return ghostValue(jl_void_type);
39523952
}
3953+
else if (head == assert_egal_sym) {
3954+
Value *cond = emit_f_is(ctx, emit_expr(ctx, args[1]), emit_expr(ctx, args[2]));
3955+
undef_var_error_ifnot(ctx, ctx.builder.CreateTrunc(cond, T_int1), (jl_sym_t*)args[0]);
3956+
return ghostValue(jl_void_type);
3957+
}
39533958
else if (head == invoke_sym) {
39543959
return emit_invoke(ctx, ex);
39553960
}

src/julia_internal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -972,6 +972,7 @@ extern jl_sym_t *gc_preserve_begin_sym; extern jl_sym_t *gc_preserve_end_sym;
972972
extern jl_sym_t *generated_sym;
973973
extern jl_sym_t *generated_only_sym;
974974
extern jl_sym_t *throw_undef_if_not_sym;
975+
extern jl_sym_t *assert_egal_sym;
975976

976977
struct _jl_sysimg_fptrs_t;
977978

0 commit comments

Comments
 (0)