Skip to content

Commit aa24f22

Browse files
committed
Added printing support for Derived and Pointer types
1 parent 2e43145 commit aa24f22

File tree

1 file changed

+51
-43
lines changed

1 file changed

+51
-43
lines changed

src/libasr/asr_utils.h

Lines changed: 51 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,49 @@ static inline ASR::ttype_t* TYPE(const ASR::asr_t *f)
3737
return ASR::down_cast<ASR::ttype_t>(f);
3838
}
3939

40+
static inline char *symbol_name(const ASR::symbol_t *f)
41+
{
42+
switch (f->type) {
43+
case ASR::symbolType::Program: {
44+
return ASR::down_cast<ASR::Program_t>(f)->m_name;
45+
}
46+
case ASR::symbolType::Module: {
47+
return ASR::down_cast<ASR::Module_t>(f)->m_name;
48+
}
49+
case ASR::symbolType::Subroutine: {
50+
return ASR::down_cast<ASR::Subroutine_t>(f)->m_name;
51+
}
52+
case ASR::symbolType::Function: {
53+
return ASR::down_cast<ASR::Function_t>(f)->m_name;
54+
}
55+
case ASR::symbolType::GenericProcedure: {
56+
return ASR::down_cast<ASR::GenericProcedure_t>(f)->m_name;
57+
}
58+
case ASR::symbolType::DerivedType: {
59+
return ASR::down_cast<ASR::DerivedType_t>(f)->m_name;
60+
}
61+
case ASR::symbolType::Variable: {
62+
return ASR::down_cast<ASR::Variable_t>(f)->m_name;
63+
}
64+
case ASR::symbolType::ExternalSymbol: {
65+
return ASR::down_cast<ASR::ExternalSymbol_t>(f)->m_name;
66+
}
67+
case ASR::symbolType::ClassProcedure: {
68+
return ASR::down_cast<ASR::ClassProcedure_t>(f)->m_name;
69+
}
70+
case ASR::symbolType::CustomOperator: {
71+
return ASR::down_cast<ASR::CustomOperator_t>(f)->m_name;
72+
}
73+
case ASR::symbolType::AssociateBlock: {
74+
return ASR::down_cast<ASR::AssociateBlock_t>(f)->m_name;
75+
}
76+
case ASR::symbolType::Block: {
77+
return ASR::down_cast<ASR::Block_t>(f)->m_name;
78+
}
79+
default : throw LFortranException("Not implemented");
80+
}
81+
}
82+
4083
static inline ASR::symbol_t *symbol_get_past_external(ASR::symbol_t *f)
4184
{
4285
if (f->type == ASR::symbolType::ExternalSymbol) {
@@ -200,6 +243,14 @@ static inline std::string type_to_str_python(const ASR::ttype_t *t)
200243
case ASR::ttypeType::CPtr: {
201244
return "CPtr";
202245
}
246+
case ASR::ttypeType::Derived: {
247+
ASR::Derived_t* d = ASR::down_cast<ASR::Derived_t>(t);
248+
return symbol_name(d->m_derived_type);
249+
}
250+
case ASR::ttypeType::Pointer: {
251+
ASR::Pointer_t* p = ASR::down_cast<ASR::Pointer_t>(t);
252+
return "Pointer[" + type_to_str_python(p->m_type) + "]";
253+
}
203254
default : throw LFortranException("Not implemented " + std::to_string(t->type));
204255
}
205256
}
@@ -241,49 +292,6 @@ static inline ASR::expr_t* expr_value(ASR::expr_t *f)
241292
return ASR::expr_value0(f);
242293
}
243294

244-
static inline char *symbol_name(const ASR::symbol_t *f)
245-
{
246-
switch (f->type) {
247-
case ASR::symbolType::Program: {
248-
return ASR::down_cast<ASR::Program_t>(f)->m_name;
249-
}
250-
case ASR::symbolType::Module: {
251-
return ASR::down_cast<ASR::Module_t>(f)->m_name;
252-
}
253-
case ASR::symbolType::Subroutine: {
254-
return ASR::down_cast<ASR::Subroutine_t>(f)->m_name;
255-
}
256-
case ASR::symbolType::Function: {
257-
return ASR::down_cast<ASR::Function_t>(f)->m_name;
258-
}
259-
case ASR::symbolType::GenericProcedure: {
260-
return ASR::down_cast<ASR::GenericProcedure_t>(f)->m_name;
261-
}
262-
case ASR::symbolType::DerivedType: {
263-
return ASR::down_cast<ASR::DerivedType_t>(f)->m_name;
264-
}
265-
case ASR::symbolType::Variable: {
266-
return ASR::down_cast<ASR::Variable_t>(f)->m_name;
267-
}
268-
case ASR::symbolType::ExternalSymbol: {
269-
return ASR::down_cast<ASR::ExternalSymbol_t>(f)->m_name;
270-
}
271-
case ASR::symbolType::ClassProcedure: {
272-
return ASR::down_cast<ASR::ClassProcedure_t>(f)->m_name;
273-
}
274-
case ASR::symbolType::CustomOperator: {
275-
return ASR::down_cast<ASR::CustomOperator_t>(f)->m_name;
276-
}
277-
case ASR::symbolType::AssociateBlock: {
278-
return ASR::down_cast<ASR::AssociateBlock_t>(f)->m_name;
279-
}
280-
case ASR::symbolType::Block: {
281-
return ASR::down_cast<ASR::Block_t>(f)->m_name;
282-
}
283-
default : throw LFortranException("Not implemented");
284-
}
285-
}
286-
287295
static inline SymbolTable *symbol_parent_symtab(const ASR::symbol_t *f)
288296
{
289297
switch (f->type) {

0 commit comments

Comments
 (0)