@@ -246,6 +246,10 @@ static jl_value_t *eval(jl_value_t *e, interpreter_state *s)
246
246
}
247
247
else if (ex -> head == method_sym ) {
248
248
jl_sym_t * fname = (jl_sym_t * )args [0 ];
249
+ if (jl_is_globalref (fname )) {
250
+ modu = jl_globalref_mod (fname );
251
+ fname = jl_globalref_name (fname );
252
+ }
249
253
assert (jl_expr_nargs (ex ) != 1 || jl_is_symbol (fname ));
250
254
251
255
if (jl_is_symbol (fname )) {
@@ -271,18 +275,29 @@ static jl_value_t *eval(jl_value_t *e, interpreter_state *s)
271
275
return jl_nothing ;
272
276
}
273
277
else if (ex -> head == const_sym ) {
274
- jl_value_t * sym = args [0 ];
278
+ jl_sym_t * sym = (jl_sym_t * )args [0 ];
279
+ if (jl_is_globalref (sym )) {
280
+ modu = jl_globalref_mod (sym );
281
+ sym = jl_globalref_name (sym );
282
+ }
275
283
assert (jl_is_symbol (sym ));
276
- jl_binding_t * b = jl_get_binding_wr (modu , ( jl_sym_t * ) sym );
284
+ jl_binding_t * b = jl_get_binding_wr (modu , sym );
277
285
jl_declare_constant (b );
278
286
return (jl_value_t * )jl_nothing ;
279
287
}
280
288
else if (ex -> head == global_sym ) {
281
289
// create uninitialized mutable binding for "global x" decl
282
290
// TODO: handle type decls
283
- for (size_t i = 0 ; i < jl_array_len (ex -> args ); i ++ ) {
284
- assert (jl_is_symbol (args [i ]));
285
- jl_get_binding_wr (modu , (jl_sym_t * )args [i ]);
291
+ size_t i , l = jl_array_len (ex -> args );
292
+ for (i = 0 ; i < l ; i ++ ) {
293
+ jl_sym_t * gsym = (jl_sym_t * )args [i ];
294
+ jl_module_t * gmodu = modu ;
295
+ if (jl_is_globalref (gsym )) {
296
+ gmodu = jl_globalref_mod (gsym );
297
+ gsym = jl_globalref_name (gsym );
298
+ }
299
+ assert (jl_is_symbol (gsym ));
300
+ jl_get_binding_wr (gmodu , gsym );
286
301
}
287
302
return (jl_value_t * )jl_nothing ;
288
303
}
@@ -296,6 +311,10 @@ static jl_value_t *eval(jl_value_t *e, interpreter_state *s)
296
311
jl_datatype_t * dt = NULL ;
297
312
JL_GC_PUSH4 (& para , & super , & temp , & dt );
298
313
assert (jl_is_svec (para ));
314
+ if (jl_is_globalref (name )) {
315
+ modu = jl_globalref_mod (name );
316
+ name = (jl_value_t * )jl_globalref_name (name );
317
+ }
299
318
assert (jl_is_symbol (name ));
300
319
dt = jl_new_abstracttype (name , NULL , (jl_svec_t * )para );
301
320
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)
328
347
jl_value_t * super = NULL , * para = NULL , * vnb = NULL , * temp = NULL ;
329
348
jl_datatype_t * dt = NULL ;
330
349
JL_GC_PUSH4 (& para , & super , & temp , & dt );
350
+ if (jl_is_globalref (name )) {
351
+ modu = jl_globalref_mod (name );
352
+ name = (jl_value_t * )jl_globalref_name (name );
353
+ }
331
354
assert (jl_is_symbol (name ));
332
355
para = eval (args [1 ], s );
333
356
assert (jl_is_svec (para ));
@@ -367,13 +390,17 @@ static jl_value_t *eval(jl_value_t *e, interpreter_state *s)
367
390
if (inside_typedef )
368
391
jl_error ("cannot eval a new data type definition while defining another type" );
369
392
jl_value_t * name = args [0 ];
370
- assert (jl_is_symbol (name ));
371
393
jl_value_t * para = eval (args [1 ], s );
372
- assert (jl_is_svec (para ));
373
394
jl_value_t * temp = NULL ;
374
395
jl_value_t * super = NULL ;
375
396
jl_datatype_t * dt = NULL ;
376
397
JL_GC_PUSH4 (& para , & super , & temp , & dt );
398
+ if (jl_is_globalref (name )) {
399
+ modu = jl_globalref_mod (name );
400
+ name = (jl_value_t * )jl_globalref_name (name );
401
+ }
402
+ assert (jl_is_symbol (name ));
403
+ assert (jl_is_svec (para ));
377
404
temp = eval (args [2 ], s ); // field names
378
405
#ifndef NDEBUG
379
406
size_t i , l = jl_svec_len (para );
0 commit comments