Skip to content
This repository was archived by the owner on Sep 13, 2019. It is now read-only.

Commit 11e81f8

Browse files
committed
add variable-reference-from-unsafe?
For now, the result is always #f, but this is a bridge to slightly more useful functionality in the racket7 branch.
1 parent 8393f0b commit 11e81f8

File tree

8 files changed

+247
-203
lines changed

8 files changed

+247
-203
lines changed

pkgs/base/info.rkt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
(define collection 'multi)
1414

15-
(define version "6.12.0.3")
15+
(define version "6.12.0.4")
1616

1717
(define deps `("racket-lib"
1818
["racket" #:version ,version]))

pkgs/racket-doc/scribblings/reference/namespaces.scrbl

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,3 +496,22 @@ Returns the declaration @tech{inspector} (see @secref["modprotect"])
496496
for the module of @racket[varref], where @racket[varref] must refer to
497497
an anonymous module variable as produced by
498498
@racket[(#%variable-reference)].}
499+
500+
501+
@defproc[(variable-reference-from-unsafe? [varref variable-reference?]) boolean?]{
502+
503+
Returns @racket[#t] if the module of the variable reference itself
504+
(not necessarily a referenced variable) is compiled in unsafe mode,
505+
@racket[#f] otherwise. Since unsafe-mode compilation is not currently
506+
supported, the result is always @racket[#f].
507+
508+
The @racket[variable-reference-from-unsafe?] procedure is intended for
509+
use as
510+
511+
@racketblock[
512+
(variable-reference-from-unsafe? (#%variable-reference))
513+
]
514+
515+
which the compiler can currently optimize to a literal @racket[#f].
516+
517+
@history[#:added "6.12.0.4"]}

racket/src/racket/src/cstartup.inc

Lines changed: 199 additions & 199 deletions
Large diffs are not rendered by default.

racket/src/racket/src/env.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ THREAD_LOCAL_DECL(int scheme_starting_up);
4848

4949
/* globals READ-ONLY SHARED */
5050
Scheme_Object *scheme_varref_const_p_proc;
51+
Scheme_Object *scheme_varref_from_unsafe_p_proc;
5152
READ_ONLY static Scheme_Env *kernel_env;
5253
READ_ONLY static Scheme_Env *unsafe_env;
5354
READ_ONLY static Scheme_Env *flfxnum_env;
@@ -92,6 +93,7 @@ static Scheme_Object *variable_phase(int, Scheme_Object *[]);
9293
static Scheme_Object *variable_base_phase(int, Scheme_Object *[]);
9394
static Scheme_Object *variable_inspector(int, Scheme_Object *[]);
9495
static Scheme_Object *variable_const_p(int, Scheme_Object *[]);
96+
static Scheme_Object *variable_unsafe_p(int, Scheme_Object *[]);
9597
static Scheme_Object *now_transforming(int argc, Scheme_Object *argv[]);
9698
static Scheme_Object *now_transforming_with_lifts(int argc, Scheme_Object *argv[]);
9799
static Scheme_Object *now_transforming_module(int argc, Scheme_Object *argv[]);
@@ -767,6 +769,12 @@ static void make_kernel_env(void)
767769
1, 1);
768770
scheme_add_global_constant("variable-reference-constant?", scheme_varref_const_p_proc, env);
769771

772+
REGISTER_SO(scheme_varref_from_unsafe_p_proc);
773+
scheme_varref_from_unsafe_p_proc = scheme_make_prim_w_arity(variable_unsafe_p,
774+
"variable-reference-from-unsafe?",
775+
1, 1);
776+
scheme_add_global_constant("variable-reference-from-unsafe?", scheme_varref_from_unsafe_p_proc, env);
777+
770778
GLOBAL_PRIM_W_ARITY("syntax-transforming?", now_transforming, 0, 0, env);
771779
GLOBAL_PRIM_W_ARITY("syntax-transforming-with-lifts?", now_transforming_with_lifts, 0, 0, env);
772780
GLOBAL_PRIM_W_ARITY("syntax-transforming-module-expression?", now_transforming_module, 0, 0, env);
@@ -2174,6 +2182,18 @@ static Scheme_Object *variable_const_p(int argc, Scheme_Object *argv[])
21742182
return scheme_false;
21752183
}
21762184

2185+
static Scheme_Object *variable_unsafe_p(int argc, Scheme_Object *argv[])
2186+
{
2187+
Scheme_Object *v;
2188+
2189+
v = argv[0];
2190+
2191+
if (!SAME_TYPE(SCHEME_TYPE(v), scheme_global_ref_type))
2192+
scheme_wrong_contract("variable-reference-from-unsafe?", "variable-reference?", 0, argc, argv);
2193+
2194+
return scheme_false;
2195+
}
2196+
21772197
static Scheme_Object *variable_p(int argc, Scheme_Object *argv[])
21782198
{
21792199
Scheme_Env *env;

racket/src/racket/src/optimize.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4490,6 +4490,10 @@ static Scheme_Object *finish_optimize_application2(Scheme_App2_Rec *app, Optimiz
44904490
}
44914491
}
44924492

4493+
if (SAME_OBJ(scheme_varref_from_unsafe_p_proc, rator)
4494+
&& SAME_TYPE(SCHEME_TYPE(rand), scheme_varref_form_type)) {
4495+
return replace_tail_inside(scheme_false, inside, app->rand);
4496+
}
44934497

44944498
if (SCHEME_PRIMP(rator) && IS_NAMED_PRIM(rator, "zero?")) {
44954499
Scheme_Object* pred;

racket/src/racket/src/schminc.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
#define USE_COMPILED_STARTUP 1
1616

17-
#define EXPECTED_PRIM_COUNT 1161
17+
#define EXPECTED_PRIM_COUNT 1162
1818
#define EXPECTED_UNSAFE_COUNT 162
1919
#define EXPECTED_FLFXNUM_COUNT 69
2020
#define EXPECTED_EXTFL_COUNT 45

racket/src/racket/src/schpriv.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,7 @@ extern Scheme_Object *scheme_struct_type_p_proc;
555555
extern Scheme_Object *scheme_current_inspector_proc;
556556
extern Scheme_Object *scheme_make_inspector_proc;
557557
extern Scheme_Object *scheme_varref_const_p_proc;
558+
extern Scheme_Object *scheme_varref_from_unsafe_p_proc;
558559
extern Scheme_Object *scheme_unsafe_fxnot_proc;
559560
extern Scheme_Object *scheme_unsafe_fxand_proc;
560561
extern Scheme_Object *scheme_unsafe_fxior_proc;

racket/src/racket/src/schvers.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@
1313
consistently.)
1414
*/
1515

16-
#define MZSCHEME_VERSION "6.12.0.3"
16+
#define MZSCHEME_VERSION "6.12.0.4"
1717

1818
#define MZSCHEME_VERSION_X 6
1919
#define MZSCHEME_VERSION_Y 12
2020
#define MZSCHEME_VERSION_Z 0
21-
#define MZSCHEME_VERSION_W 3
21+
#define MZSCHEME_VERSION_W 4
2222

2323
#define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y)
2424
#define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)

0 commit comments

Comments
 (0)