Made changes based on Matthew's comments.

1. Changed the API documentation for scheme_make_hash_tree, adding primitives for:

* SCHEME_hashtr_eq
* SCHEME_hashtr_equal
* SCHEME_hashtr_eqv

2. Changed direct uses of scheme_make_hash_tree to use these enumed values.

3. Fixed bugs in documentation

4. Defaults to racket/interactive (and racket/gui/interactive) if there is nothing in the config file
This commit is contained in:
Leif Andersen 2016-07-25 22:33:09 -04:00
parent d0f9e4ba81
commit a6b7af9733
20 changed files with 58 additions and 37 deletions

View File

@ -314,9 +314,8 @@ and the weak pointer's value can be @cpp{NULL}.}
Similar to @cpp{scheme_make_hash_table}, but creates a hash Similar to @cpp{scheme_make_hash_table}, but creates a hash
tree. A hash tree is equivalent to an immutable hash table tree. A hash tree is equivalent to an immutable hash table
created by @racket[hash]. The @var{type} argument must be created by @racket[hash]. The @var{type} argument must be
either either @cpp{SCHEME_hash_ptr} or either @cpp{SCHEME_hashtr_eq}, @cpp{SCHEME_hashtr_equal}, or @cpp{SCHEME_hashtr_eqv},
@cpp{SCHEME_hash_string}, which determines how keys are which determines how keys are compared.}
compared.}
@function[(void scheme_hash_tree_set @function[(void scheme_hash_tree_set
[Scheme_Hash_Tree* table] [Scheme_Hash_Tree* table]

View File

@ -178,4 +178,11 @@ directory}:
@racket[find-config-tethered-console-bin-dir] and @racket[find-config-tethered-console-bin-dir] and
@racket[find-config-tethered-gui-bin-dir].} @racket[find-config-tethered-gui-bin-dir].}
@item{@indexed-racket['interactive-file] and
@indexed-racket['gui-interactive-file] --- a path to the interactive module
that runs when the REPL runs on startup, unless the
@Flag{q}/@DFlag{no-init-file} is provided. Defaults to
@racketmodname[racket/interactive] and
@racketmodname[racket/gui/interactive].}
] ]

View File

@ -102,7 +102,8 @@ thread, unless the @Flag{V}/@DFlag{no-yield} command-line flag is
specified. Requiring @racketmodname[racket/gui/base] sets this parameter call specified. Requiring @racketmodname[racket/gui/base] sets this parameter call
@racket[(racket 'yield)]. @racket[(racket 'yield)].
@history[#:changed "6.7" "Run racket/interactive file rather than directly running .racketrc"] @history[#:changed "6.7" @elem{Run @racketmodname[racket/interactive] file
rather than directly running @racket[(find-system-path 'init-file)]}]
@; ---------------------------------------------------------------------- @; ----------------------------------------------------------------------

View File

@ -1,4 +1,4 @@
#lang racket #lang racket/base
(when (collection-file-path "main.rkt" "xrepl" (when (collection-file-path "main.rkt" "xrepl"
#:fail (lambda _ #f)) #:fail (lambda _ #f))
(dynamic-require 'xrepl #f)) (dynamic-require 'xrepl #f))

View File

@ -35,6 +35,7 @@ static void pre_filter_cmdline_arguments(int *argc, char ***argv);
#define WINDOWS_INIT_FILENAME "%%HOMEDIRVE%%\\%%HOMEPATH%%\\gracketrc.rktl" #define WINDOWS_INIT_FILENAME "%%HOMEDIRVE%%\\%%HOMEPATH%%\\gracketrc.rktl"
#define MACOS9_INIT_FILENAME "PREFERENCES:gracketrc.rktl" #define MACOS9_INIT_FILENAME "PREFERENCES:gracketrc.rktl"
#define INIT_FILENAME_CONF_SYM "gui-interactive-file" #define INIT_FILENAME_CONF_SYM "gui-interactive-file"
#define DEFAULT_INIT_MODULE "racket/gui/interactive"
#if WIN32 #if WIN32
# define NEED_CONSOLE_PRINTF # define NEED_CONSOLE_PRINTF
# define DEFER_EXPLICIT_EXIT # define DEFER_EXPLICIT_EXIT

View File

@ -670,7 +670,7 @@ static int finish_cmd_line_run(FinishArgs *fa, Repl_Proc repl)
#ifndef DONT_LOAD_INIT_FILE #ifndef DONT_LOAD_INIT_FILE
if (fa->a->use_repl && !fa->a->no_init_file) { if (fa->a->use_repl && !fa->a->no_init_file) {
Scheme_Object *a[2]; Scheme_Object *a[2];
a[0] = get_init_filename(fa->global_env, INIT_FILENAME_CONF_SYM); a[0] = get_init_filename(fa->global_env, INIT_FILENAME_CONF_SYM, DEFAULT_INIT_MODULE);
if (a[0]) { if (a[0]) {
a[1] = scheme_false; a[1] = scheme_false;
scheme_dynamic_require(2, a); scheme_dynamic_require(2, a);

View File

@ -956,6 +956,12 @@ enum {
SCHEME_hash_late_weak_ptr SCHEME_hash_late_weak_ptr
}; };
enum {
SCHEME_hashtr_eq,
SCHEME_hashtr_equal,
SCHEME_hashtr_eqv
};
typedef struct Scheme_Env Scheme_Env; typedef struct Scheme_Env Scheme_Env;
#define SCHEME_VAR_BUCKET(obj) ((Scheme_Bucket *)(obj)) #define SCHEME_VAR_BUCKET(obj) ((Scheme_Bucket *)(obj))

View File

@ -103,7 +103,8 @@ extern BOOL WINAPI DllMain(HINSTANCE inst, ULONG reason, LPVOID reserved);
* * Otherwise check config file for location * * Otherwise check config file for location
*/ */
static Scheme_Object *get_init_filename(Scheme_Env *env, static Scheme_Object *get_init_filename(Scheme_Env *env,
char *init_filename_sym) char *init_filename_sym,
char *default_init_module)
{ {
Scheme_Object *f, *a[2], *build_path; Scheme_Object *f, *a[2], *build_path;
Scheme_Thread * volatile p; Scheme_Thread * volatile p;
@ -143,13 +144,18 @@ static Scheme_Object *get_init_filename(Scheme_Env *env,
f = scheme_read(port); f = scheme_read(port);
scheme_close_input_port(port); scheme_close_input_port(port);
if(SCHEME_HASHTRP(f)) { if(SCHEME_HASHTRP(f)) {
f = scheme_hash_tree_get(f, scheme_intern_symbol(init_filename_sym)); f = scheme_hash_tree_get((Scheme_Hash_Tree *)f, scheme_intern_symbol(init_filename_sym));
if(f) { if(f) {
p->error_buf = save; p->error_buf = save;
return f; return f;
} }
} }
} }
/* Failed to load custom init file, load racket/interactive */
f = scheme_intern_symbol(default_init_module);
p->error_buf = save;
return f;
} }
p->error_buf = save; p->error_buf = save;
@ -167,6 +173,7 @@ extern Scheme_Object *scheme_initialize(Scheme_Env *env);
# define WINDOWS_INIT_FILENAME "%%HOMEDIRVE%%\\%%HOMEPATH%%\\racketrc.rktl" # define WINDOWS_INIT_FILENAME "%%HOMEDIRVE%%\\%%HOMEPATH%%\\racketrc.rktl"
# define MACOS9_INIT_FILENAME "PREFERENCES:racketrc.rktl" # define MACOS9_INIT_FILENAME "PREFERENCES:racketrc.rktl"
# define INIT_FILENAME_CONF_SYM "interactive-file" # define INIT_FILENAME_CONF_SYM "interactive-file"
# define DEFAULT_INIT_MODULE "racket/interactive"
# define PRINTF printf # define PRINTF printf
# define PROGRAM "Racket" # define PROGRAM "Racket"
# define PROGRAM_LC "racket" # define PROGRAM_LC "racket"

View File

@ -1100,7 +1100,7 @@ void create_skip_table(Scheme_Comp_Env *start_frame)
} }
if (!table) { if (!table) {
table = scheme_make_hash_tree(0); table = scheme_make_hash_tree(SCHEME_hashtr_eq);
table = scheme_hash_tree_set(table, scheme_make_integer(0), (Scheme_Object *)end_frame); table = scheme_hash_tree_set(table, scheme_make_integer(0), (Scheme_Object *)end_frame);
} }

View File

@ -862,7 +862,7 @@ static Scheme_Object *global_binding(Scheme_Object *id, Scheme_Comp_Env *env)
Scheme_Hash_Tree *binds; Scheme_Hash_Tree *binds;
binds = (Scheme_Hash_Tree *)scheme_hash_get(env->binding_namess, scheme_env_phase(env->genv)); binds = (Scheme_Hash_Tree *)scheme_hash_get(env->binding_namess, scheme_env_phase(env->genv));
if (!binds) if (!binds)
binds = scheme_make_hash_tree(0); binds = scheme_make_hash_tree(SCHEME_hashtr_eq);
binds = scheme_hash_tree_set(binds, sym, id); binds = scheme_hash_tree_set(binds, sym, id);
scheme_hash_set(env->binding_namess, scheme_env_phase(env->genv), (Scheme_Object *)binds); scheme_hash_set(env->binding_namess, scheme_env_phase(env->genv), (Scheme_Object *)binds);
} }

View File

@ -6479,7 +6479,7 @@ static Scheme_Object *collpaths_gen_p(int argc, Scheme_Object **argv, int rel_ok
Scheme_Hash_Tree *new_ht; Scheme_Hash_Tree *new_ht;
Scheme_Object *key, *val, *idx, *a[2]; Scheme_Object *key, *val, *idx, *a[2];
new_ht = scheme_make_hash_tree(0); new_ht = scheme_make_hash_tree(SCHEME_hashtr_eq);
a[0] = s; a[0] = s;
idx = scheme_hash_table_iterate_start(1, a); idx = scheme_hash_table_iterate_start(1, a);

View File

@ -3145,11 +3145,11 @@ Scheme_Hash_Tree *scheme_make_hash_tree(int eql_kind)
Scheme_Hash_Tree *scheme_make_hash_tree_of_type(Scheme_Type stype) Scheme_Hash_Tree *scheme_make_hash_tree_of_type(Scheme_Type stype)
{ {
if (stype == scheme_eq_hash_tree_type) if (stype == scheme_eq_hash_tree_type)
return scheme_make_hash_tree(0); return scheme_make_hash_tree(SCHEME_hashtr_eq);
else if (stype == scheme_hash_tree_type) else if (stype == scheme_hash_tree_type)
return scheme_make_hash_tree(1); return scheme_make_hash_tree(SCHEME_hashtr_equal);
else else
return scheme_make_hash_tree(2); return scheme_make_hash_tree(SCHEME_hashtr_eqv);
} }
Scheme_Hash_Tree *scheme_make_hash_tree_placeholder(int eql_kind) Scheme_Hash_Tree *scheme_make_hash_tree_placeholder(int eql_kind)

View File

@ -1012,7 +1012,7 @@ static Scheme_Object *primitive_table(int argc, Scheme_Object *argv[])
Scheme_Bucket **bs, *b; Scheme_Bucket **bs, *b;
intptr_t i; intptr_t i;
ht = scheme_make_hash_tree(0); ht = scheme_make_hash_tree(SCHEME_hashtr_eq);
bs = menv->toplevel->buckets; bs = menv->toplevel->buckets;
for (i = menv->toplevel->size; i--; ) { for (i = menv->toplevel->size; i--; ) {
@ -5197,7 +5197,7 @@ static Scheme_Object *add_start(Scheme_Object *v, int base_phase, int eval_exp,
Scheme_Bucket *b; Scheme_Bucket *b;
if (!ht) if (!ht)
ht = scheme_make_hash_tree(0); ht = scheme_make_hash_tree(SCHEME_hashtr_eq);
key = make_key(base_phase, eval_exp, eval_run); key = make_key(base_phase, eval_exp, eval_run);
@ -7820,7 +7820,7 @@ Scheme_Object *scheme_prune_bindings_table(Scheme_Object *binding_names, Scheme_
Scheme_Object *k, *val, *base_stx; Scheme_Object *k, *val, *base_stx;
Scheme_Hash_Tree *ht; Scheme_Hash_Tree *ht;
ht = scheme_make_hash_tree(0); ht = scheme_make_hash_tree(SCHEME_hashtr_eq);
base_stx = scheme_stx_add_module_context(scheme_datum_to_syntax(scheme_false, scheme_false, scheme_false, 0, 0), base_stx = scheme_stx_add_module_context(scheme_datum_to_syntax(scheme_false, scheme_false, scheme_false, 0, 0),
scheme_module_context_at_phase(scheme_stx_to_module_context(rn_stx), scheme_module_context_at_phase(scheme_stx_to_module_context(rn_stx),
@ -8480,7 +8480,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *orig_form, Scheme_Comp_Env
all_provided = scheme_make_hash_table_eqv(); all_provided = scheme_make_hash_table_eqv();
all_reprovided = scheme_make_hash_table_eqv(); all_reprovided = scheme_make_hash_table_eqv();
all_defs = scheme_make_hash_tree(2); all_defs = scheme_make_hash_tree(SCHEME_hashtr_eqv);
all_defs_out = scheme_make_hash_table_eqv(); all_defs_out = scheme_make_hash_table_eqv();
rn_set = env->genv->stx_context; rn_set = env->genv->stx_context;
@ -12291,7 +12291,7 @@ void add_single_require(Scheme_Module_Exports *me, /* from module */
if (exns) { if (exns) {
Scheme_Object *l, *a; Scheme_Object *l, *a;
excepts = scheme_make_hash_tree(0); excepts = scheme_make_hash_tree(SCHEME_hashtr_eq);
for (l = exns; SCHEME_STX_PAIRP(l); l = SCHEME_STX_CDR(l)) { for (l = exns; SCHEME_STX_PAIRP(l); l = SCHEME_STX_CDR(l)) {
a = SCHEME_STX_CAR(l); a = SCHEME_STX_CAR(l);
if (SCHEME_STXP(a)) if (SCHEME_STXP(a))

View File

@ -200,7 +200,7 @@ static void register_traversers(void);
void scheme_init_optimize() void scheme_init_optimize()
{ {
REGISTER_SO(empty_eq_hash_tree); REGISTER_SO(empty_eq_hash_tree);
empty_eq_hash_tree = scheme_make_hash_tree(0); empty_eq_hash_tree = scheme_make_hash_tree(SCHEME_hashtr_eq);
#ifdef MZ_PRECISE_GC #ifdef MZ_PRECISE_GC
register_traversers(); register_traversers();
@ -4769,7 +4769,7 @@ static void add_type(Optimize_Info *info, Scheme_Object *var, Scheme_Object *pre
} }
if (!new_types) if (!new_types)
new_types = scheme_make_hash_tree(0); new_types = scheme_make_hash_tree(SCHEME_hashtr_eq);
new_types = scheme_hash_tree_set(new_types, var, pred); new_types = scheme_hash_tree_set(new_types, var, pred);
info->types = new_types; info->types = new_types;
} }
@ -6685,7 +6685,7 @@ static Scheme_Object *optimize_lets(Scheme_Object *form, Optimize_Info *info, in
body_info = optimize_info_add_frame(info, head->count, head->count, 0); body_info = optimize_info_add_frame(info, head->count, head->count, 0);
rhs_info = body_info; rhs_info = body_info;
merge_skip_vars = scheme_make_hash_tree(0); merge_skip_vars = scheme_make_hash_tree(SCHEME_hashtr_eq);
body = head->body; body = head->body;
for (i = head->num_clauses; i--; ) { for (i = head->num_clauses; i--; ) {
pre_body = (Scheme_IR_Let_Value *)body; pre_body = (Scheme_IR_Let_Value *)body;

View File

@ -1334,7 +1334,7 @@ Scheme_Object *scheme_resolve_lets(Scheme_Object *form, Resolve_Info *info)
/* Find body and make a set of local bindings: */ /* Find body and make a set of local bindings: */
body = head->body; body = head->body;
pre_body = NULL; pre_body = NULL;
binding_vars = scheme_make_hash_tree(0); binding_vars = scheme_make_hash_tree(SCHEME_hashtr_eq);
for (i = head->num_clauses; i--; ) { for (i = head->num_clauses; i--; ) {
pre_body = (Scheme_IR_Let_Value *)body; pre_body = (Scheme_IR_Let_Value *)body;
for (j = 0; j < pre_body->count; j++) { for (j = 0; j < pre_body->count; j++) {
@ -2150,7 +2150,7 @@ module_expr_resolve(Scheme_Object *data, Resolve_Info *old_rslv)
Scheme_Object *k, *val; Scheme_Object *k, *val;
Scheme_Hash_Tree *ht; Scheme_Hash_Tree *ht;
ht = scheme_make_hash_tree(1); ht = scheme_make_hash_tree(SCHEME_hashtr_equal);
if (SCHEME_HASHTRP(m->other_binding_names)) { if (SCHEME_HASHTRP(m->other_binding_names)) {
Scheme_Hash_Tree *t = (Scheme_Hash_Tree *)m->other_binding_names; Scheme_Hash_Tree *t = (Scheme_Hash_Tree *)m->other_binding_names;
@ -2706,7 +2706,7 @@ static void resolve_info_add_mapping(Resolve_Info *info, Scheme_IR_Local *var, S
Scheme_Hash_Tree *ht; Scheme_Hash_Tree *ht;
if (!info->redirects) { if (!info->redirects) {
ht = scheme_make_hash_tree(0); ht = scheme_make_hash_tree(SCHEME_hashtr_eq);
info->redirects = ht; info->redirects = ht;
} }

View File

@ -2540,7 +2540,7 @@ static Scheme_Object *env_copy(int argc, Scheme_Object *argv[])
return scheme_make_environment_variables(ht); return scheme_make_environment_variables(ht);
/* copy system environment variables into a hash table: */ /* copy system environment variables into a hash table: */
ht = scheme_make_hash_tree(1); ht = scheme_make_hash_tree(SCHEME_hashtr_equal);
#ifdef DOS_FILE_SYSTEM #ifdef DOS_FILE_SYSTEM
{ {
@ -2598,7 +2598,7 @@ static Scheme_Object *env_make(int argc, Scheme_Object *argv[])
Scheme_Object *varbs, *valbs; Scheme_Object *varbs, *valbs;
int i; int i;
ht = scheme_make_hash_tree(1); ht = scheme_make_hash_tree(SCHEME_hashtr_equal);
for (i = 0; i < argc; i += 2) { for (i = 0; i < argc; i += 2) {
varbs = argv[i]; varbs = argv[i];

View File

@ -6170,7 +6170,7 @@ static Scheme_Object *do_chaperone_struct(const char *name, int is_impersonator,
} else { } else {
if (!scheme_inspector_sees_part(argv[0], inspector, field_pos)) { if (!scheme_inspector_sees_part(argv[0], inspector, field_pos)) {
if (!setter_positions) if (!setter_positions)
setter_positions = scheme_make_hash_tree(0); setter_positions = scheme_make_hash_tree(SCHEME_hashtr_eq);
setter_positions = scheme_hash_tree_set(setter_positions, scheme_make_integer(field_pos), scheme_true); setter_positions = scheme_hash_tree_set(setter_positions, scheme_make_integer(field_pos), scheme_true);
} }
} }
@ -6234,12 +6234,12 @@ static Scheme_Object *do_chaperone_struct(const char *name, int is_impersonator,
if (prop) { if (prop) {
if (SCHEME_TRUEP(proc)) { if (SCHEME_TRUEP(proc)) {
if (!red_props) if (!red_props)
red_props = scheme_make_hash_tree(0); red_props = scheme_make_hash_tree(SCHEME_hashtr_eq);
red_props = scheme_hash_tree_set(red_props, prop, proc); red_props = scheme_hash_tree_set(red_props, prop, proc);
has_redirect = 1; has_redirect = 1;
} else { } else {
if (!empty_red_props) if (!empty_red_props)
empty_red_props = scheme_make_hash_tree(0); empty_red_props = scheme_make_hash_tree(SCHEME_hashtr_eq);
empty_red_props = scheme_hash_tree_set(empty_red_props, prop, proc); empty_red_props = scheme_hash_tree_set(empty_red_props, prop, proc);
} }
} else if (st) { } else if (st) {
@ -6438,7 +6438,7 @@ Scheme_Hash_Tree *scheme_parse_chaperone_props(const char *who, int start_at, in
NULL); NULL);
if (!ht) if (!ht)
ht = scheme_make_hash_tree(0); ht = scheme_make_hash_tree(SCHEME_hashtr_eq);
ht = scheme_hash_tree_set(ht, v, argv[start_at + 1]); ht = scheme_hash_tree_set(ht, v, argv[start_at + 1]);
start_at += 2; start_at += 2;

View File

@ -311,8 +311,8 @@ void scheme_init_stx(Scheme_Env *env)
REGISTER_SO(empty_scope_table); REGISTER_SO(empty_scope_table);
REGISTER_SO(empty_propagate_table); REGISTER_SO(empty_propagate_table);
REGISTER_SO(empty_scope_set); REGISTER_SO(empty_scope_set);
empty_hash_tree = scheme_make_hash_tree(0); empty_hash_tree = scheme_make_hash_tree(SCHEME_hashtr_eq);
empty_scope_set = (Scheme_Scope_Set *)scheme_make_hash_tree(0); empty_scope_set = (Scheme_Scope_Set *)scheme_make_hash_tree(SCHEME_hashtr_eq);
empty_scope_table = MALLOC_ONE_TAGGED(Scheme_Scope_Table); empty_scope_table = MALLOC_ONE_TAGGED(Scheme_Scope_Table);
empty_scope_table->so.type = scheme_scope_table_type; empty_scope_table->so.type = scheme_scope_table_type;
empty_scope_table->simple_scopes = empty_scope_set; empty_scope_table->simple_scopes = empty_scope_set;

View File

@ -6875,7 +6875,7 @@ static Scheme_Object *get_members(Scheme_Object *skip_nacks)
return scheme_null; return scheme_null;
else if (scheme_list_length(skip_nacks) > 5) { else if (scheme_list_length(skip_nacks) > 5) {
Scheme_Hash_Tree *ht; Scheme_Hash_Tree *ht;
ht = scheme_make_hash_tree(0); ht = scheme_make_hash_tree(SCHEME_hashtr_eq);
for (; SCHEME_PAIRP(skip_nacks); skip_nacks = SCHEME_CDR(skip_nacks)) { for (; SCHEME_PAIRP(skip_nacks); skip_nacks = SCHEME_CDR(skip_nacks)) {
ht = scheme_hash_tree_set(ht, SCHEME_CAR(skip_nacks), scheme_true); ht = scheme_hash_tree_set(ht, SCHEME_CAR(skip_nacks), scheme_true);
} }
@ -7666,7 +7666,7 @@ static Scheme_Object *reparameterize(int argc, Scheme_Object **argv)
naya = MALLOC_ONE_TAGGED(Scheme_Config); naya = MALLOC_ONE_TAGGED(Scheme_Config);
naya->so.type = scheme_config_type; naya->so.type = scheme_config_type;
ht = scheme_make_hash_tree(0); ht = scheme_make_hash_tree(SCHEME_hashtr_eq);
naya->ht = ht; naya->ht = ht;
naya->root = npz; naya->root = npz;
@ -7891,7 +7891,7 @@ static void make_initial_config(Scheme_Thread *p)
config->root = paramz; config->root = paramz;
{ {
Scheme_Hash_Tree *ht; Scheme_Hash_Tree *ht;
ht = scheme_make_hash_tree(0); ht = scheme_make_hash_tree(SCHEME_hashtr_eq);
config->ht = ht; config->ht = ht;
} }

View File

@ -982,7 +982,7 @@ void scheme_validate_closure(Mz_CPort *port, Scheme_Object *expr,
static Scheme_Hash_Tree *as_nonempty_procs(Scheme_Hash_Tree *procs) static Scheme_Hash_Tree *as_nonempty_procs(Scheme_Hash_Tree *procs)
{ {
if (!procs) if (!procs)
procs = scheme_make_hash_tree(0); procs = scheme_make_hash_tree(SCHEME_hashtr_eq);
return procs; return procs;
} }