@@ -37,6 +37,49 @@ static inline ASR::ttype_t* TYPE(const ASR::asr_t *f)
37
37
return ASR::down_cast<ASR::ttype_t >(f);
38
38
}
39
39
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
+
40
83
static inline ASR::symbol_t *symbol_get_past_external (ASR::symbol_t *f)
41
84
{
42
85
if (f->type == ASR::symbolType::ExternalSymbol) {
@@ -200,6 +243,14 @@ static inline std::string type_to_str_python(const ASR::ttype_t *t)
200
243
case ASR::ttypeType::CPtr: {
201
244
return " CPtr" ;
202
245
}
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
+ }
203
254
default : throw LFortranException (" Not implemented " + std::to_string (t->type ));
204
255
}
205
256
}
@@ -241,49 +292,6 @@ static inline ASR::expr_t* expr_value(ASR::expr_t *f)
241
292
return ASR::expr_value0 (f);
242
293
}
243
294
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
-
287
295
static inline SymbolTable *symbol_parent_symtab (const ASR::symbol_t *f)
288
296
{
289
297
switch (f->type ) {
0 commit comments