Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/src/interpreter.c b/src/interpreter.c
- index 5c89505..d84191d9 100644
- --- a/src/interpreter.c
- +++ b/src/interpreter.c
- @@ -246,6 +246,10 @@ static jl_value_t *eval(jl_value_t *e, interpreter_state *s)
- }
- else if (ex->head == method_sym) {
- jl_sym_t *fname = (jl_sym_t*)args[0];
- + if (jl_is_globalref(fname)) {
- + modu = jl_globalref_mod(fname);
- + fname = jl_globalref_name(fname);
- + }
- assert(jl_expr_nargs(ex) != 1 || jl_is_symbol(fname));
- if (jl_is_symbol(fname)) {
- @@ -271,18 +275,29 @@ static jl_value_t *eval(jl_value_t *e, interpreter_state *s)
- return jl_nothing;
- }
- else if (ex->head == const_sym) {
- - jl_value_t *sym = args[0];
- + jl_sym_t *sym = (jl_sym_t*)args[0];
- + if (jl_is_globalref(sym)) {
- + modu = jl_globalref_mod(sym);
- + sym = jl_globalref_name(sym);
- + }
- assert(jl_is_symbol(sym));
- - jl_binding_t *b = jl_get_binding_wr(modu, (jl_sym_t*)sym);
- + jl_binding_t *b = jl_get_binding_wr(modu, sym);
- jl_declare_constant(b);
- return (jl_value_t*)jl_nothing;
- }
- else if (ex->head == global_sym) {
- // create uninitialized mutable binding for "global x" decl
- // TODO: handle type decls
- - for (size_t i=0; i < jl_array_len(ex->args); i++) {
- - assert(jl_is_symbol(args[i]));
- - jl_get_binding_wr(modu, (jl_sym_t*)args[i]);
- + size_t i, l = jl_array_len(ex->args);
- + for (i = 0; i < l; i++) {
- + jl_sym_t *gsym = (jl_sym_t*)args[i];
- + jl_module_t *gmodu = modu;
- + if (jl_is_globalref(gsym)) {
- + gmodu = jl_globalref_mod(gsym);
- + gsym = jl_globalref_name(gsym);
- + }
- + assert(jl_is_symbol(gsym));
- + jl_get_binding_wr(gmodu, gsym);
- }
- return (jl_value_t*)jl_nothing;
- }
- @@ -296,6 +311,10 @@ static jl_value_t *eval(jl_value_t *e, interpreter_state *s)
- jl_datatype_t *dt = NULL;
- JL_GC_PUSH4(¶, &super, &temp, &dt);
- assert(jl_is_svec(para));
- + if (jl_is_globalref(name)) {
- + modu = jl_globalref_mod(name);
- + name = (jl_value_t*)jl_globalref_name(name);
- + }
- assert(jl_is_symbol(name));
- dt = jl_new_abstracttype(name, NULL, (jl_svec_t*)para);
- jl_binding_t *b = jl_get_binding_wr(modu, (jl_sym_t*)name);
- @@ -328,6 +347,10 @@ static jl_value_t *eval(jl_value_t *e, interpreter_state *s)
- jl_value_t *super = NULL, *para = NULL, *vnb = NULL, *temp = NULL;
- jl_datatype_t *dt = NULL;
- JL_GC_PUSH4(¶, &super, &temp, &dt);
- + if (jl_is_globalref(name)) {
- + modu = jl_globalref_mod(name);
- + name = (jl_value_t*)jl_globalref_name(name);
- + }
- assert(jl_is_symbol(name));
- para = eval(args[1], s);
- assert(jl_is_svec(para));
- @@ -367,13 +390,17 @@ static jl_value_t *eval(jl_value_t *e, interpreter_state *s)
- if (inside_typedef)
- jl_error("cannot eval a new data type definition while defining another type");
- jl_value_t *name = args[0];
- - assert(jl_is_symbol(name));
- jl_value_t *para = eval(args[1], s);
- - assert(jl_is_svec(para));
- jl_value_t *temp = NULL;
- jl_value_t *super = NULL;
- jl_datatype_t *dt = NULL;
- JL_GC_PUSH4(¶, &super, &temp, &dt);
- + if (jl_is_globalref(name)) {
- + modu = jl_globalref_mod(name);
- + name = (jl_value_t*)jl_globalref_name(name);
- + }
- + assert(jl_is_symbol(name));
- + assert(jl_is_svec(para));
- temp = eval(args[2], s); // field names
- #ifndef NDEBUG
- size_t i, l = jl_svec_len(para);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement