@@ -28,6 +28,7 @@ jl_module_t *jl_new_module(jl_sym_t *name)
28
28
m -> constant_table = NULL ;
29
29
m -> call_func = NULL ;
30
30
m -> istopmod = 0 ;
31
+ m -> std_imports = 0 ;
31
32
m -> uuid = uv_now (uv_default_loop ());
32
33
htable_new (& m -> bindings , 0 );
33
34
arraylist_new (& m -> usings , 0 );
@@ -120,6 +121,16 @@ DLLEXPORT jl_module_t *jl_get_module_of_binding(jl_module_t *m, jl_sym_t *var)
120
121
// and overwriting.
121
122
DLLEXPORT jl_binding_t * jl_get_binding_for_method_def (jl_module_t * m , jl_sym_t * var )
122
123
{
124
+ if (jl_base_module && m -> std_imports && !jl_binding_resolved_p (m ,var )) {
125
+ jl_module_t * opmod = (jl_module_t * )jl_get_global (jl_base_module , jl_symbol ("Operators" ));
126
+ if (opmod != NULL && jl_defines_or_exports_p (opmod , var )) {
127
+ jl_printf (JL_STDERR ,
128
+ "WARNING: module %s should explicitly import %s from %s\n" ,
129
+ m -> name -> name , var -> name , jl_base_module -> name -> name );
130
+ jl_module_import (m , opmod , var );
131
+ }
132
+ }
133
+
123
134
jl_binding_t * * bp = (jl_binding_t * * )ptrhash_bp (& m -> bindings , var );
124
135
jl_binding_t * b = * bp ;
125
136
@@ -133,6 +144,15 @@ DLLEXPORT jl_binding_t *jl_get_binding_for_method_def(jl_module_t *m, jl_sym_t *
133
144
jl_errorf ("error in method definition: %s.%s cannot be extended" , b -> owner -> name -> name , var -> name );
134
145
}
135
146
else {
147
+ if (jl_base_module && b -> owner == jl_base_module ) {
148
+ jl_module_t * opmod = (jl_module_t * )jl_get_global (jl_base_module , jl_symbol ("Operators" ));
149
+ if (opmod != NULL && jl_defines_or_exports_p (opmod , var )) {
150
+ jl_printf (JL_STDERR ,
151
+ "WARNING: module %s should explicitly import %s from %s\n" ,
152
+ m -> name -> name , var -> name , b -> owner -> name -> name );
153
+ return b2 ;
154
+ }
155
+ }
136
156
jl_errorf ("error in method definition: function %s.%s must be explicitly imported to be extended" , b -> owner -> name -> name , var -> name );
137
157
}
138
158
}
0 commit comments