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
tree. A hash tree is equivalent to an immutable hash table
created by @racket[hash]. The @var{type} argument must be
either either @cpp{SCHEME_hash_ptr} or
@cpp{SCHEME_hash_string}, which determines how keys are
compared.}
either @cpp{SCHEME_hashtr_eq}, @cpp{SCHEME_hashtr_equal}, or @cpp{SCHEME_hashtr_eqv},
which determines how keys are compared.}
@function[(void scheme_hash_tree_set
[Scheme_Hash_Tree* table]

View File

@ -178,4 +178,11 @@ directory}:
@racket[find-config-tethered-console-bin-dir] and
@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
@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"
#:fail (lambda _ #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 MACOS9_INIT_FILENAME "PREFERENCES:gracketrc.rktl"
#define INIT_FILENAME_CONF_SYM "gui-interactive-file"
#define DEFAULT_INIT_MODULE "racket/gui/interactive"
#if WIN32
# define NEED_CONSOLE_PRINTF
# 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
if (fa->a->use_repl && !fa->a->no_init_file) {
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]) {
a[1] = scheme_false;
scheme_dynamic_require(2, a);

View File

@ -956,6 +956,12 @@ enum {
SCHEME_hash_late_weak_ptr
};
enum {
SCHEME_hashtr_eq,
SCHEME_hashtr_equal,
SCHEME_hashtr_eqv
};
typedef struct Scheme_Env Scheme_Env;
#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
*/
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_Thread * volatile p;
@ -143,13 +144,18 @@ static Scheme_Object *get_init_filename(Scheme_Env *env,
f = scheme_read(port);
scheme_close_input_port(port);
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) {
p->error_buf = save;
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;
@ -167,6 +173,7 @@ extern Scheme_Object *scheme_initialize(Scheme_Env *env);
# define WINDOWS_INIT_FILENAME "%%HOMEDIRVE%%\\%%HOMEPATH%%\\racketrc.rktl"
# define MACOS9_INIT_FILENAME "PREFERENCES:racketrc.rktl"
# define INIT_FILENAME_CONF_SYM "interactive-file"
# define DEFAULT_INIT_MODULE "racket/interactive"
# define PRINTF printf
# define PROGRAM "Racket"
# define PROGRAM_LC "racket"

View File

@ -1100,7 +1100,7 @@ void create_skip_table(Scheme_Comp_Env *start_frame)
}
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);
}

View File

@ -862,7 +862,7 @@ static Scheme_Object *global_binding(Scheme_Object *id, Scheme_Comp_Env *env)
Scheme_Hash_Tree *binds;
binds = (Scheme_Hash_Tree *)scheme_hash_get(env->binding_namess, scheme_env_phase(env->genv));
if (!binds)
binds = scheme_make_hash_tree(0);
binds = scheme_make_hash_tree(SCHEME_hashtr_eq);
binds = scheme_hash_tree_set(binds, sym, id);
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_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;
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)
{
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)
return scheme_make_hash_tree(1);
return scheme_make_hash_tree(SCHEME_hashtr_equal);
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)

View File

@ -1012,7 +1012,7 @@ static Scheme_Object *primitive_table(int argc, Scheme_Object *argv[])
Scheme_Bucket **bs, *b;
intptr_t i;
ht = scheme_make_hash_tree(0);
ht = scheme_make_hash_tree(SCHEME_hashtr_eq);
bs = menv->toplevel->buckets;
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;
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);
@ -7820,7 +7820,7 @@ Scheme_Object *scheme_prune_bindings_table(Scheme_Object *binding_names, Scheme_
Scheme_Object *k, *val, *base_stx;
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),
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_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();
rn_set = env->genv->stx_context;
@ -12291,7 +12291,7 @@ void add_single_require(Scheme_Module_Exports *me, /* from module */
if (exns) {
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)) {
a = SCHEME_STX_CAR(l);
if (SCHEME_STXP(a))

View File

@ -200,7 +200,7 @@ static void register_traversers(void);
void scheme_init_optimize()
{
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
register_traversers();
@ -4769,7 +4769,7 @@ static void add_type(Optimize_Info *info, Scheme_Object *var, Scheme_Object *pre
}
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);
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);
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;
for (i = head->num_clauses; i--; ) {
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: */
body = head->body;
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--; ) {
pre_body = (Scheme_IR_Let_Value *)body;
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_Hash_Tree *ht;
ht = scheme_make_hash_tree(1);
ht = scheme_make_hash_tree(SCHEME_hashtr_equal);
if (SCHEME_HASHTRP(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;
if (!info->redirects) {
ht = scheme_make_hash_tree(0);
ht = scheme_make_hash_tree(SCHEME_hashtr_eq);
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);
/* 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
{
@ -2598,7 +2598,7 @@ static Scheme_Object *env_make(int argc, Scheme_Object *argv[])
Scheme_Object *varbs, *valbs;
int i;
ht = scheme_make_hash_tree(1);
ht = scheme_make_hash_tree(SCHEME_hashtr_equal);
for (i = 0; i < argc; i += 2) {
varbs = argv[i];

View File

@ -6170,7 +6170,7 @@ static Scheme_Object *do_chaperone_struct(const char *name, int is_impersonator,
} else {
if (!scheme_inspector_sees_part(argv[0], inspector, field_pos)) {
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);
}
}
@ -6234,12 +6234,12 @@ static Scheme_Object *do_chaperone_struct(const char *name, int is_impersonator,
if (prop) {
if (SCHEME_TRUEP(proc)) {
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);
has_redirect = 1;
} else {
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);
}
} else if (st) {
@ -6438,7 +6438,7 @@ Scheme_Hash_Tree *scheme_parse_chaperone_props(const char *who, int start_at, in
NULL);
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]);
start_at += 2;

View File

@ -311,8 +311,8 @@ void scheme_init_stx(Scheme_Env *env)
REGISTER_SO(empty_scope_table);
REGISTER_SO(empty_propagate_table);
REGISTER_SO(empty_scope_set);
empty_hash_tree = scheme_make_hash_tree(0);
empty_scope_set = (Scheme_Scope_Set *)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(SCHEME_hashtr_eq);
empty_scope_table = MALLOC_ONE_TAGGED(Scheme_Scope_Table);
empty_scope_table->so.type = scheme_scope_table_type;
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;
else if (scheme_list_length(skip_nacks) > 5) {
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)) {
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->so.type = scheme_config_type;
ht = scheme_make_hash_tree(0);
ht = scheme_make_hash_tree(SCHEME_hashtr_eq);
naya->ht = ht;
naya->root = npz;
@ -7891,7 +7891,7 @@ static void make_initial_config(Scheme_Thread *p)
config->root = paramz;
{
Scheme_Hash_Tree *ht;
ht = scheme_make_hash_tree(0);
ht = scheme_make_hash_tree(SCHEME_hashtr_eq);
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)
{
if (!procs)
procs = scheme_make_hash_tree(0);
procs = scheme_make_hash_tree(SCHEME_hashtr_eq);
return procs;
}