@@ -467,6 +467,20 @@ ASR::symbol_t* import_from_module(Allocator &al, ASR::Module_t *m, SymbolTable *
467467 ASR::accessType::Public
468468 );
469469 return ASR::down_cast<ASR::symbol_t >(est);
470+ } else if (ASR::is_a<ASR::EnumType_t>(*t)) {
471+ ASR::EnumType_t *et = ASR::down_cast<ASR::EnumType_t>(t);
472+ Str name;
473+ name.from_str (al, new_sym_name);
474+ char *cname = name.c_str (al);
475+ ASR::asr_t *est = ASR::make_ExternalSymbol_t (
476+ al, et->base .base .loc ,
477+ /* a_symtab */ current_scope,
478+ /* a_name */ cname,
479+ (ASR::symbol_t *)et,
480+ m->m_name , nullptr , 0 , et->m_name ,
481+ ASR::accessType::Public
482+ );
483+ return ASR::down_cast<ASR::symbol_t >(est);
470484 } else if (ASR::is_a<ASR::Variable_t>(*t)) {
471485 ASR::Variable_t *mv = ASR::down_cast<ASR::Variable_t>(t);
472486 // `mv` is the Variable in a module. Now we construct
@@ -5306,12 +5320,12 @@ class BodyVisitor : public CommonVisitor<BodyVisitor> {
53065320 return ;
53075321 }
53085322
5309- ASR::symbol_t *t = current_scope->resolve_symbol (value);
5310-
5311- if (!t) {
5323+ ASR::symbol_t *org_sym = current_scope->resolve_symbol (value);
5324+ if (!org_sym) {
53125325 throw SemanticError (" '" + value + " ' is not defined in the scope" ,
53135326 x.base .base .loc );
53145327 }
5328+ ASR::symbol_t *t = ASRUtils::symbol_get_past_external (org_sym);
53155329 if (ASR::is_a<ASR::Variable_t>(*t)) {
53165330 ASR::Variable_t *var = ASR::down_cast<ASR::Variable_t>(t);
53175331 visit_AttributeUtil (var->m_type , x.m_attr , t, x.base .base .loc );
@@ -5324,7 +5338,7 @@ class BodyVisitor : public CommonVisitor<BodyVisitor> {
53245338 x.base .base .loc );
53255339 }
53265340 ASR::Variable_t* enum_member_variable = ASR::down_cast<ASR::Variable_t>(enum_member);
5327- ASR::expr_t * enum_type_var = ASRUtils::EXPR (ASR::make_Var_t (al, x.base .base .loc , t ));
5341+ ASR::expr_t * enum_type_var = ASRUtils::EXPR (ASR::make_Var_t (al, x.base .base .loc , org_sym ));
53285342 ASR::expr_t * enum_member_var = ASRUtils::EXPR (ASR::make_EnumStaticMember_t (al, x.base .base .loc , enum_type_var,
53295343 enum_member, enum_type->m_type ,
53305344 ASRUtils::expr_value (enum_member_variable->m_symbolic_value )));
@@ -5342,12 +5356,12 @@ class BodyVisitor : public CommonVisitor<BodyVisitor> {
53425356 }
53435357 if ( ASR::is_a<ASR::Variable_t>(*struct_member) ) {
53445358 ASR::Variable_t* struct_member_variable = ASR::down_cast<ASR::Variable_t>(struct_member);
5345- ASR::expr_t * struct_type_var = ASRUtils::EXPR (ASR::make_Var_t (al, x.base .base .loc , t ));
5359+ ASR::expr_t * struct_type_var = ASRUtils::EXPR (ASR::make_Var_t (al, x.base .base .loc , org_sym ));
53465360 tmp = ASR::make_StructStaticMember_t (al, x.base .base .loc ,
53475361 struct_type_var, struct_member, struct_member_variable->m_type ,
53485362 nullptr );
53495363 } else if ( ASR::is_a<ASR::UnionType_t>(*struct_member) ) {
5350- ASR::expr_t * struct_type_var = ASRUtils::EXPR (ASR::make_Var_t (al, x.base .base .loc , t ));
5364+ ASR::expr_t * struct_type_var = ASRUtils::EXPR (ASR::make_Var_t (al, x.base .base .loc , org_sym ));
53515365 ASR::ttype_t * union_type = ASRUtils::TYPE (ASR::make_Union_t (al, x.base .base .loc , struct_member, nullptr , 0 ));
53525366 tmp = ASR::make_StructStaticMember_t (al, x.base .base .loc , struct_type_var, struct_member, union_type, nullptr );
53535367 }
0 commit comments