diff --git a/src/libasr/ASR.asdl b/src/libasr/ASR.asdl index e357761082..5139f99481 100644 --- a/src/libasr/ASR.asdl +++ b/src/libasr/ASR.asdl @@ -224,7 +224,7 @@ expr | NamedExpr(expr target, expr value, ttype type) | FunctionCall(symbol name, symbol? original_name, call_arg* args, ttype type, expr? value, expr? dt) - | StructTypeConstructor(symbol dt_sym, expr* args, ttype type, expr? value) + | StructTypeConstructor(symbol dt_sym, call_arg* args, ttype type, expr? value) | EnumTypeConstructor(symbol dt_sym, expr* args, ttype type, expr? value) | UnionTypeConstructor(symbol dt_sym, expr* args, ttype type, expr? value) | ImpliedDoLoop(expr* values, expr var, expr start, expr end, diff --git a/src/libasr/codegen/asr_to_llvm.cpp b/src/libasr/codegen/asr_to_llvm.cpp index 4d39bb4e57..6627491a4a 100644 --- a/src/libasr/codegen/asr_to_llvm.cpp +++ b/src/libasr/codegen/asr_to_llvm.cpp @@ -5563,8 +5563,9 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor break; } case ASR::ttypeType::Struct: { - ASR::Struct_t* der = (ASR::Struct_t*)(&(x->m_type->base)); - ASR::StructType_t* der_type = (ASR::StructType_t*)(&(der->m_derived_type->base)); + ASR::Struct_t* der = ASR::down_cast(x->m_type); + ASR::StructType_t* der_type = ASR::down_cast( + ASRUtils::symbol_get_past_external(der->m_derived_type)); der_type_name = std::string(der_type->m_name); uint32_t h = get_hash((ASR::asr_t*)x); if( llvm_symtab.find(h) != llvm_symtab.end() ) { @@ -5584,8 +5585,9 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor break; } case ASR::ttypeType::Class: { - ASR::Class_t* der = (ASR::Class_t*)(&(x->m_type->base)); - ASR::ClassType_t* der_type = (ASR::ClassType_t*)(&(der->m_class_type->base)); + ASR::Class_t* der = ASR::down_cast(x->m_type); + ASR::ClassType_t* der_type = ASR::down_cast( + ASRUtils::symbol_get_past_external(der->m_class_type)); der_type_name = std::string(der_type->m_name); uint32_t h = get_hash((ASR::asr_t*)x); if( llvm_symtab.find(h) != llvm_symtab.end() ) { diff --git a/src/libasr/pass/class_constructor.cpp b/src/libasr/pass/class_constructor.cpp index d0b8c989cc..412d0d87b7 100644 --- a/src/libasr/pass/class_constructor.cpp +++ b/src/libasr/pass/class_constructor.cpp @@ -3,91 +3,225 @@ #include #include #include -#include #include +#include -#include - +#include +#include +#include namespace LCompilers { using ASR::down_cast; using ASR::is_a; -class ClassConstructorVisitor : public PassUtils::PassVisitor -{ -private: +class ReplaceStructTypeConstructor: public ASR::BaseExprReplacer { + + private: + + Allocator& al; + Vec& pass_result; + bool& remove_original_statement; + bool& inside_symtab; + std::map>& symtab2decls; + + public: + + SymbolTable* current_scope; ASR::expr_t* result_var; -public: + ReplaceStructTypeConstructor(Allocator& al_, Vec& pass_result_, + bool& remove_original_statement_, bool& inside_symtab_, + std::map>& symtab2decls_) : + al(al_), pass_result(pass_result_), + remove_original_statement(remove_original_statement_), + inside_symtab(inside_symtab_), symtab2decls(symtab2decls_), + current_scope(nullptr), result_var(nullptr) {} - bool is_constructor_present; + void replace_StructTypeConstructor(ASR::StructTypeConstructor_t* x) { + if( x->n_args == 0 ) { + remove_original_statement = true; + return ; + } + if( result_var == nullptr ) { + std::string result_var_name = current_scope->get_unique_name("temp_struct_var__"); + result_var = PassUtils::create_auxiliary_variable(x->base.base.loc, + result_var_name, al, current_scope, x->m_type); + *current_expr = result_var; + } else { + if( inside_symtab ) { + *current_expr = nullptr; + } else { + remove_original_statement = true; + } + } - ClassConstructorVisitor(Allocator &al) : PassVisitor(al, nullptr), - result_var(nullptr), is_constructor_present(false) { - pass_result.reserve(al, 0); - } + std::deque constructor_arg_syms; + ASR::Struct_t* dt_der = ASR::down_cast(x->m_type); + ASR::StructType_t* dt_dertype = ASR::down_cast( + ASRUtils::symbol_get_past_external(dt_der->m_derived_type)); + while( dt_dertype ) { + for( int i = (int) dt_dertype->n_members - 1; i >= 0; i-- ) { + constructor_arg_syms.push_front( + dt_dertype->m_symtab->get_symbol( + dt_dertype->m_members[i])); + } + if( dt_dertype->m_parent != nullptr ) { + ASR::symbol_t* dt_der_sym = ASRUtils::symbol_get_past_external( + dt_dertype->m_parent); + LCOMPILERS_ASSERT(ASR::is_a(*dt_der_sym)); + dt_dertype = ASR::down_cast(dt_der_sym); + } else { + dt_dertype = nullptr; + } + } + LCOMPILERS_ASSERT(constructor_arg_syms.size() == x->n_args); - void visit_Assignment(const ASR::Assignment_t& x) { - ASR::Assignment_t& xx = const_cast(x); - if( x.m_value->type == ASR::exprType::StructTypeConstructor ) { - is_constructor_present = true; - if( x.m_overloaded == nullptr ) { - result_var = x.m_target; - visit_expr(*x.m_value); + for( size_t i = 0; i < x->n_args; i++ ) { + if( x->m_args[i].m_value == nullptr ) { + continue ; + } + ASR::symbol_t* member = constructor_arg_syms[i]; + if( ASR::is_a(*x->m_args[i].m_value) ) { + ASR::expr_t* result_var_copy = result_var; + ASR::symbol_t *v = nullptr; + if (ASR::is_a(*result_var_copy)) { + v = ASR::down_cast(result_var_copy)->m_v; + } + result_var = ASRUtils::EXPR(ASRUtils::getStructInstanceMember_t(al, + x->base.base.loc, (ASR::asr_t*) result_var_copy, v, + member, current_scope)); + ASR::expr_t** current_expr_copy = current_expr; + current_expr = &(x->m_args[i].m_value); + replace_expr(x->m_args[i].m_value); + current_expr = current_expr_copy; + result_var = result_var_copy; } else { - std::string result_var_name = current_scope->get_unique_name("temp_struct_var__"); - result_var = PassUtils::create_auxiliary_variable(x.m_value->base.loc, result_var_name, - al, current_scope, ASRUtils::expr_type(x.m_target)); - visit_expr(*x.m_value); - ASR::stmt_t* x_m_overloaded = x.m_overloaded; - if( ASR::is_a(*x.m_overloaded) ) { - ASR::SubroutineCall_t* assign_call = ASR::down_cast(xx.m_overloaded); - Vec assign_call_args; - assign_call_args.reserve(al, 2); - assign_call_args.push_back(al, assign_call->m_args[0]); - ASR::call_arg_t arg_1; - arg_1.loc = assign_call->m_args[1].loc; - arg_1.m_value = result_var; - assign_call_args.push_back(al, arg_1); - x_m_overloaded = ASRUtils::STMT(ASR::make_SubroutineCall_t(al, x_m_overloaded->base.loc, - assign_call->m_name, assign_call->m_original_name, assign_call_args.p, - assign_call_args.size(), assign_call->m_dt)); + Vec* result_vec = nullptr; + if( inside_symtab ) { + if( symtab2decls.find(current_scope) == symtab2decls.end() ) { + Vec result_vec_; + result_vec_.reserve(al, 0); + symtab2decls[current_scope] = result_vec_; + } + result_vec = &symtab2decls[current_scope]; + } else { + result_vec = &pass_result; } - pass_result.push_back(al, ASRUtils::STMT(ASR::make_Assignment_t(al, x.base.base.loc, x.m_target, - result_var, x_m_overloaded))); + ASR::symbol_t *v = nullptr; + if (ASR::is_a(*result_var)) { + v = ASR::down_cast(result_var)->m_v; + } + ASR::expr_t* derived_ref = ASRUtils::EXPR(ASRUtils::getStructInstanceMember_t(al, + x->base.base.loc, (ASR::asr_t*) result_var, v, + member, current_scope)); + ASR::stmt_t* assign = ASRUtils::STMT(ASR::make_Assignment_t(al, + x->base.base.loc, derived_ref, + x->m_args[i].m_value, nullptr)); + result_vec->push_back(al, assign); } } - } +}; - void visit_StructTypeConstructor(const ASR::StructTypeConstructor_t &x) { - if( x.n_args == 0 ) { - remove_original_stmt = true; +class StructTypeConstructorVisitor : public ASR::CallReplacerOnExpressionsVisitor +{ + private: + + Allocator& al; + bool remove_original_statement; + bool inside_symtab; + ReplaceStructTypeConstructor replacer; + Vec pass_result; + std::map> symtab2decls; + + public: + + StructTypeConstructorVisitor(Allocator& al_) : + al(al_), remove_original_statement(false), + inside_symtab(true), replacer(al_, pass_result, + remove_original_statement, inside_symtab, + symtab2decls) { + pass_result.n = 0; + pass_result.reserve(al, 0); } - ASR::Struct_t* dt_der = down_cast(x.m_type); - ASR::StructType_t* dt_dertype = ASR::down_cast( - ASRUtils::symbol_get_past_external(dt_der->m_derived_type)); - for( size_t i = 0; i < std::min(dt_dertype->n_members, x.n_args); i++ ) { - ASR::symbol_t* member = dt_dertype->m_symtab->resolve_symbol(std::string(dt_dertype->m_members[i], strlen(dt_dertype->m_members[i]))); - ASR::symbol_t *v = nullptr; - if (is_a(*result_var)) { - v = down_cast(result_var)->m_v; + + void call_replacer() { + replacer.current_expr = current_expr; + replacer.current_scope = current_scope; + replacer.replace_expr(*current_expr); + } + + void transform_stmts(ASR::stmt_t **&m_body, size_t &n_body) { + bool inside_symtab_copy = inside_symtab; + inside_symtab = false; + Vec body; + body.reserve(al, n_body); + + if( symtab2decls.find(current_scope) != symtab2decls.end() ) { + Vec& decls = symtab2decls[current_scope]; + for (size_t j = 0; j < decls.size(); j++) { + body.push_back(al, decls[j]); + } + symtab2decls.erase(current_scope); + } + + for (size_t i = 0; i < n_body; i++) { + pass_result.n = 0; + pass_result.reserve(al, 1); + remove_original_statement = false; + replacer.result_var = nullptr; + visit_stmt(*m_body[i]); + for (size_t j = 0; j < pass_result.size(); j++) { + body.push_back(al, pass_result[j]); + } + if( !remove_original_statement ) { + body.push_back(al, m_body[i]); + } + remove_original_statement = false; } - ASR::expr_t* derived_ref = ASRUtils::EXPR(ASRUtils::getStructInstanceMember_t(al, x.base.base.loc, (ASR::asr_t*)result_var, v, member, current_scope)); - ASR::stmt_t* assign = ASRUtils::STMT(ASR::make_Assignment_t(al, x.base.base.loc, derived_ref, x.m_args[i], nullptr)); - pass_result.push_back(al, assign); + m_body = body.p; + n_body = body.size(); + replacer.result_var = nullptr; + pass_result.n = 0; + pass_result.reserve(al, 0); + inside_symtab = inside_symtab_copy; } - } + + void visit_Variable(const ASR::Variable_t &x) { + ASR::Variable_t& xx = const_cast(x); + replacer.result_var = ASRUtils::EXPR(ASR::make_Var_t(al, + x.base.base.loc, &(xx.base))); + ASR::CallReplacerOnExpressionsVisitor< + StructTypeConstructorVisitor>::visit_Variable(x); + } + + void visit_Assignment(const ASR::Assignment_t &x) { + if (x.m_overloaded) { + this->visit_stmt(*x.m_overloaded); + remove_original_statement = false; + return ; + } + + replacer.result_var = x.m_target; + ASR::expr_t** current_expr_copy_9 = current_expr; + current_expr = const_cast(&(x.m_value)); + this->call_replacer(); + current_expr = current_expr_copy_9; + if( !remove_original_statement ) { + this->visit_expr(*x.m_value); + } + } + }; -void pass_replace_class_constructor(Allocator &al, ASR::TranslationUnit_t &unit, - const LCompilers::PassOptions& /*pass_options*/) { - ClassConstructorVisitor v(al); - do { - v.is_constructor_present = false; - v.visit_TranslationUnit(unit); - } while( v.is_constructor_present ); +void pass_replace_class_constructor(Allocator &al, + ASR::TranslationUnit_t &unit, + const LCompilers::PassOptions& /*pass_options*/) { + StructTypeConstructorVisitor v(al); + v.visit_TranslationUnit(unit); + PassUtils::UpdateDependenciesVisitor w(al); + w.visit_TranslationUnit(unit); } diff --git a/src/lpython/semantics/python_ast_to_asr.cpp b/src/lpython/semantics/python_ast_to_asr.cpp index 480c57043e..f71b9341b0 100644 --- a/src/lpython/semantics/python_ast_to_asr.cpp +++ b/src/lpython/semantics/python_ast_to_asr.cpp @@ -1138,15 +1138,12 @@ class CommonVisitor : public AST::BaseVisitor { s_generic, args_new.p, args_new.size(), nullptr); } } else if(ASR::is_a(*s)) { - Vec args_new; - args_new.reserve(al, args.size()); - visit_expr_list(args, args.size(), args_new); ASR::StructType_t* StructType = ASR::down_cast(s); for( size_t i = 0; i < std::min(args.size(), StructType->n_members); i++ ) { std::string member_name = StructType->m_members[i]; ASR::Variable_t* member_var = ASR::down_cast( StructType->m_symtab->resolve_symbol(member_name)); - ASR::expr_t* arg_new_i = args_new[i]; + ASR::expr_t* arg_new_i = args[i].m_value; cast_helper(member_var->m_type, arg_new_i, arg_new_i->base.loc); ASR::ttype_t* left_type = member_var->m_type; ASR::ttype_t* right_type = ASRUtils::expr_type(arg_new_i); @@ -1162,10 +1159,10 @@ class CommonVisitor : public AST::BaseVisitor { ); throw SemanticAbort(); } - args_new.p[i] = arg_new_i; + args.p[i].m_value = arg_new_i; } ASR::ttype_t* der_type = ASRUtils::TYPE(ASR::make_Struct_t(al, loc, stemp, nullptr, 0)); - return ASR::make_StructTypeConstructor_t(al, loc, stemp, args_new.p, args_new.size(), der_type, nullptr); + return ASR::make_StructTypeConstructor_t(al, loc, stemp, args.p, args.size(), der_type, nullptr); } else if( ASR::is_a(*s) ) { Vec args_new; args_new.reserve(al, args.size()); diff --git a/tests/reference/asr-structs_01-be14d49.json b/tests/reference/asr-structs_01-be14d49.json index 8f3a5d5505..2f1c6e5a57 100644 --- a/tests/reference/asr-structs_01-be14d49.json +++ b/tests/reference/asr-structs_01-be14d49.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "asr-structs_01-be14d49.stdout", - "stdout_hash": "bd6651b101dc97e717d0604af576a8492e549d6830a89ae0b2d2a83f", + "stdout_hash": "7fc590bac6faf35bb632814509f73079edbd4c868b32dcfcf5efe3f2", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/asr-structs_01-be14d49.stdout b/tests/reference/asr-structs_01-be14d49.stdout index d98460ba1e..7c5abb7716 100644 --- a/tests/reference/asr-structs_01-be14d49.stdout +++ b/tests/reference/asr-structs_01-be14d49.stdout @@ -1 +1 @@ -(TranslationUnit (SymbolTable 1 {_global_symbols: (Module (SymbolTable 8 {A: (StructType (SymbolTable 2 {x: (Variable 2 x [] Local () () Default (Integer 4 []) Source Public Required .false.), y: (Variable 2 y [] Local () () Default (Real 4 []) Source Public Required .false.)}) A [] [y x] Source Public .false. () ()), _lpython_main_program: (Function (SymbolTable 7 {}) _lpython_main_program (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [g] [] [(SubroutineCall 8 g () [] ())] () Public .false. .false.), change_struct: (Function (SymbolTable 4 {a: (Variable 4 a [] In () () Default (Struct 8 A []) Source Public Required .false.)}) change_struct (FunctionType [(Struct 8 A [])] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 4 a)] [(= (StructInstanceMember (Var 4 a) 2 x (Integer 4 []) ()) (IntegerBinOp (StructInstanceMember (Var 4 a) 2 x (Integer 4 []) ()) Add (IntegerConstant 1 (Integer 4 [])) (Integer 4 []) ()) ()) (= (StructInstanceMember (Var 4 a) 2 y (Real 4 []) ()) (RealBinOp (StructInstanceMember (Var 4 a) 2 y (Real 4 []) ()) Add (Cast (IntegerConstant 1 (Integer 4 [])) IntegerToReal (Real 4 []) ()) (Real 4 []) ()) ())] () Public .false. .false.), f: (Function (SymbolTable 3 {a: (Variable 3 a [] In () () Default (Struct 8 A []) Source Public Required .false.)}) f (FunctionType [(Struct 8 A [])] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 3 a)] [(Print () [(StructInstanceMember (Var 3 a) 2 x (Integer 4 []) ())] () ()) (Print () [(StructInstanceMember (Var 3 a) 2 y (Real 4 []) ())] () ())] () Public .false. .false.), g: (Function (SymbolTable 5 {x: (Variable 5 x [] Local () () Default (Struct 8 A []) Source Public Required .false.)}) g (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [f f change_struct] [] [(= (Var 5 x) (StructTypeConstructor 8 A [(Cast (RealConstant 3.250000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 3.250000 (Real 4 []))) (IntegerConstant 3 (Integer 4 []))] (Struct 8 A []) ()) ()) (SubroutineCall 8 f () [((Var 5 x))] ()) (Assert (IntegerCompare (StructInstanceMember (Var 5 x) 2 x (Integer 4 []) ()) Eq (IntegerConstant 3 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (Cast (StructInstanceMember (Var 5 x) 2 y (Real 4 []) ()) RealToReal (Real 8 []) ()) Eq (RealConstant 3.250000 (Real 8 [])) (Logical 4 []) ()) ()) (= (StructInstanceMember (Var 5 x) 2 x (Integer 4 []) ()) (IntegerConstant 5 (Integer 4 [])) ()) (= (StructInstanceMember (Var 5 x) 2 y (Real 4 []) ()) (Cast (RealConstant 5.500000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 5.500000 (Real 4 []))) ()) (SubroutineCall 8 f () [((Var 5 x))] ()) (Assert (IntegerCompare (StructInstanceMember (Var 5 x) 2 x (Integer 4 []) ()) Eq (IntegerConstant 5 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (Cast (StructInstanceMember (Var 5 x) 2 y (Real 4 []) ()) RealToReal (Real 8 []) ()) Eq (RealConstant 5.500000 (Real 8 [])) (Logical 4 []) ()) ()) (SubroutineCall 8 change_struct () [((Var 5 x))] ()) (Assert (IntegerCompare (StructInstanceMember (Var 5 x) 2 x (Integer 4 []) ()) Eq (IntegerConstant 6 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (Cast (StructInstanceMember (Var 5 x) 2 y (Real 4 []) ()) RealToReal (Real 8 []) ()) Eq (RealConstant 6.500000 (Real 8 [])) (Logical 4 []) ()) ())] () Public .false. .false.)}) _global_symbols [] .false. .false.), main_program: (Program (SymbolTable 6 {_lpython_main_program: (ExternalSymbol 6 _lpython_main_program 8 _lpython_main_program _global_symbols [] _lpython_main_program Public)}) main_program [_global_symbols] [(SubroutineCall 6 _lpython_main_program () [] ())])}) []) +(TranslationUnit (SymbolTable 1 {_global_symbols: (Module (SymbolTable 8 {A: (StructType (SymbolTable 2 {x: (Variable 2 x [] Local () () Default (Integer 4 []) Source Public Required .false.), y: (Variable 2 y [] Local () () Default (Real 4 []) Source Public Required .false.)}) A [] [y x] Source Public .false. () ()), _lpython_main_program: (Function (SymbolTable 7 {}) _lpython_main_program (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [g] [] [(SubroutineCall 8 g () [] ())] () Public .false. .false.), change_struct: (Function (SymbolTable 4 {a: (Variable 4 a [] In () () Default (Struct 8 A []) Source Public Required .false.)}) change_struct (FunctionType [(Struct 8 A [])] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 4 a)] [(= (StructInstanceMember (Var 4 a) 2 x (Integer 4 []) ()) (IntegerBinOp (StructInstanceMember (Var 4 a) 2 x (Integer 4 []) ()) Add (IntegerConstant 1 (Integer 4 [])) (Integer 4 []) ()) ()) (= (StructInstanceMember (Var 4 a) 2 y (Real 4 []) ()) (RealBinOp (StructInstanceMember (Var 4 a) 2 y (Real 4 []) ()) Add (Cast (IntegerConstant 1 (Integer 4 [])) IntegerToReal (Real 4 []) ()) (Real 4 []) ()) ())] () Public .false. .false.), f: (Function (SymbolTable 3 {a: (Variable 3 a [] In () () Default (Struct 8 A []) Source Public Required .false.)}) f (FunctionType [(Struct 8 A [])] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 3 a)] [(Print () [(StructInstanceMember (Var 3 a) 2 x (Integer 4 []) ())] () ()) (Print () [(StructInstanceMember (Var 3 a) 2 y (Real 4 []) ())] () ())] () Public .false. .false.), g: (Function (SymbolTable 5 {x: (Variable 5 x [] Local () () Default (Struct 8 A []) Source Public Required .false.)}) g (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [f f change_struct] [] [(= (Var 5 x) (StructTypeConstructor 8 A [((Cast (RealConstant 3.250000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 3.250000 (Real 4 [])))) ((IntegerConstant 3 (Integer 4 [])))] (Struct 8 A []) ()) ()) (SubroutineCall 8 f () [((Var 5 x))] ()) (Assert (IntegerCompare (StructInstanceMember (Var 5 x) 2 x (Integer 4 []) ()) Eq (IntegerConstant 3 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (Cast (StructInstanceMember (Var 5 x) 2 y (Real 4 []) ()) RealToReal (Real 8 []) ()) Eq (RealConstant 3.250000 (Real 8 [])) (Logical 4 []) ()) ()) (= (StructInstanceMember (Var 5 x) 2 x (Integer 4 []) ()) (IntegerConstant 5 (Integer 4 [])) ()) (= (StructInstanceMember (Var 5 x) 2 y (Real 4 []) ()) (Cast (RealConstant 5.500000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 5.500000 (Real 4 []))) ()) (SubroutineCall 8 f () [((Var 5 x))] ()) (Assert (IntegerCompare (StructInstanceMember (Var 5 x) 2 x (Integer 4 []) ()) Eq (IntegerConstant 5 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (Cast (StructInstanceMember (Var 5 x) 2 y (Real 4 []) ()) RealToReal (Real 8 []) ()) Eq (RealConstant 5.500000 (Real 8 [])) (Logical 4 []) ()) ()) (SubroutineCall 8 change_struct () [((Var 5 x))] ()) (Assert (IntegerCompare (StructInstanceMember (Var 5 x) 2 x (Integer 4 []) ()) Eq (IntegerConstant 6 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (Cast (StructInstanceMember (Var 5 x) 2 y (Real 4 []) ()) RealToReal (Real 8 []) ()) Eq (RealConstant 6.500000 (Real 8 [])) (Logical 4 []) ()) ())] () Public .false. .false.)}) _global_symbols [] .false. .false.), main_program: (Program (SymbolTable 6 {_lpython_main_program: (ExternalSymbol 6 _lpython_main_program 8 _lpython_main_program _global_symbols [] _lpython_main_program Public)}) main_program [_global_symbols] [(SubroutineCall 6 _lpython_main_program () [] ())])}) []) diff --git a/tests/reference/asr-structs_02-2ab459a.json b/tests/reference/asr-structs_02-2ab459a.json index 83e7586030..5a012cf66a 100644 --- a/tests/reference/asr-structs_02-2ab459a.json +++ b/tests/reference/asr-structs_02-2ab459a.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "asr-structs_02-2ab459a.stdout", - "stdout_hash": "0f62ffbeedec79367cb14981151e724de1764cb74b5adb3066f380b4", + "stdout_hash": "307f33ebe205c2db704979606cd08768c0ca349d55166e81ab8b5b61", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/asr-structs_02-2ab459a.stdout b/tests/reference/asr-structs_02-2ab459a.stdout index a02cbdc0a2..2ca979bbbd 100644 --- a/tests/reference/asr-structs_02-2ab459a.stdout +++ b/tests/reference/asr-structs_02-2ab459a.stdout @@ -1 +1 @@ -(TranslationUnit (SymbolTable 1 {_global_symbols: (Module (SymbolTable 7 {A: (StructType (SymbolTable 2 {x: (Variable 2 x [] Local () () Default (Integer 4 []) Source Public Required .false.), y: (Variable 2 y [] Local () () Default (Real 4 []) Source Public Required .false.)}) A [] [x y] Source Public .false. () ()), _lpython_main_program: (Function (SymbolTable 6 {}) _lpython_main_program (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [g] [] [(SubroutineCall 7 g () [] ())] () Public .false. .false.), f: (Function (SymbolTable 3 {a: (Variable 3 a [] In () () Default (CPtr) BindC Public Required .true.), a1: (Variable 3 a1 [] Local () () Default (Struct 7 A []) Source Public Required .false.), a2: (Variable 3 a2 [] Local () () Default (Pointer (Struct 7 A [])) Source Public Required .false.), x: (Variable 3 x [] Local () () Default (Integer 4 []) Source Public Required .false.), y: (Variable 3 y [] Local () () Default (Real 4 []) Source Public Required .false.)}) f (FunctionType [(CPtr)] () BindC Implementation () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 3 a)] [(= (Var 3 a1) (StructTypeConstructor 7 A [(IntegerConstant 3 (Integer 4 [])) (Cast (RealConstant 3.250000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 3.250000 (Real 4 [])))] (Struct 7 A []) ()) ()) (= (Var 3 a2) (GetPointer (Var 3 a1) (Pointer (Struct 7 A [])) ()) ()) (Print () [(Var 3 a2) (GetPointer (Var 3 a1) (Pointer (Struct 7 A [])) ())] () ()) (= (Var 3 x) (StructInstanceMember (Var 3 a2) 2 x (Integer 4 []) ()) ()) (= (Var 3 y) (StructInstanceMember (Var 3 a2) 2 y (Real 4 []) ()) ()) (Assert (IntegerCompare (Var 3 x) Eq (IntegerConstant 3 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (Cast (Var 3 y) RealToReal (Real 8 []) ()) Eq (RealConstant 3.250000 (Real 8 [])) (Logical 4 []) ()) ()) (CPtrToPointer (Var 3 a) (Var 3 a2) ()) (Print () [(Var 3 a) (Var 3 a2) (GetPointer (Var 3 a1) (Pointer (Struct 7 A [])) ())] () ())] () Public .false. .false.), g: (Function (SymbolTable 4 {b: (Variable 4 b [] Local () () Default (CPtr) Source Public Required .false.)}) g (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [f] [] [(SubroutineCall 7 f () [((Var 4 b))] ())] () Public .false. .false.)}) _global_symbols [] .false. .false.), main_program: (Program (SymbolTable 5 {_lpython_main_program: (ExternalSymbol 5 _lpython_main_program 7 _lpython_main_program _global_symbols [] _lpython_main_program Public)}) main_program [_global_symbols] [(SubroutineCall 5 _lpython_main_program () [] ())])}) []) +(TranslationUnit (SymbolTable 1 {_global_symbols: (Module (SymbolTable 7 {A: (StructType (SymbolTable 2 {x: (Variable 2 x [] Local () () Default (Integer 4 []) Source Public Required .false.), y: (Variable 2 y [] Local () () Default (Real 4 []) Source Public Required .false.)}) A [] [x y] Source Public .false. () ()), _lpython_main_program: (Function (SymbolTable 6 {}) _lpython_main_program (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [g] [] [(SubroutineCall 7 g () [] ())] () Public .false. .false.), f: (Function (SymbolTable 3 {a: (Variable 3 a [] In () () Default (CPtr) BindC Public Required .true.), a1: (Variable 3 a1 [] Local () () Default (Struct 7 A []) Source Public Required .false.), a2: (Variable 3 a2 [] Local () () Default (Pointer (Struct 7 A [])) Source Public Required .false.), x: (Variable 3 x [] Local () () Default (Integer 4 []) Source Public Required .false.), y: (Variable 3 y [] Local () () Default (Real 4 []) Source Public Required .false.)}) f (FunctionType [(CPtr)] () BindC Implementation () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 3 a)] [(= (Var 3 a1) (StructTypeConstructor 7 A [((IntegerConstant 3 (Integer 4 []))) ((Cast (RealConstant 3.250000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 3.250000 (Real 4 []))))] (Struct 7 A []) ()) ()) (= (Var 3 a2) (GetPointer (Var 3 a1) (Pointer (Struct 7 A [])) ()) ()) (Print () [(Var 3 a2) (GetPointer (Var 3 a1) (Pointer (Struct 7 A [])) ())] () ()) (= (Var 3 x) (StructInstanceMember (Var 3 a2) 2 x (Integer 4 []) ()) ()) (= (Var 3 y) (StructInstanceMember (Var 3 a2) 2 y (Real 4 []) ()) ()) (Assert (IntegerCompare (Var 3 x) Eq (IntegerConstant 3 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (Cast (Var 3 y) RealToReal (Real 8 []) ()) Eq (RealConstant 3.250000 (Real 8 [])) (Logical 4 []) ()) ()) (CPtrToPointer (Var 3 a) (Var 3 a2) ()) (Print () [(Var 3 a) (Var 3 a2) (GetPointer (Var 3 a1) (Pointer (Struct 7 A [])) ())] () ())] () Public .false. .false.), g: (Function (SymbolTable 4 {b: (Variable 4 b [] Local () () Default (CPtr) Source Public Required .false.)}) g (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [f] [] [(SubroutineCall 7 f () [((Var 4 b))] ())] () Public .false. .false.)}) _global_symbols [] .false. .false.), main_program: (Program (SymbolTable 5 {_lpython_main_program: (ExternalSymbol 5 _lpython_main_program 7 _lpython_main_program _global_symbols [] _lpython_main_program Public)}) main_program [_global_symbols] [(SubroutineCall 5 _lpython_main_program () [] ())])}) []) diff --git a/tests/reference/asr-structs_03-0cef911.json b/tests/reference/asr-structs_03-0cef911.json index bae154f216..312921975b 100644 --- a/tests/reference/asr-structs_03-0cef911.json +++ b/tests/reference/asr-structs_03-0cef911.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "asr-structs_03-0cef911.stdout", - "stdout_hash": "abac8c1a97a266f68e9409726b2da9e62f03f4b40ab7b72c2ff380af", + "stdout_hash": "18ac59879acbbcbf1cd7180817cd17e88e09946a462e7226a9d865d6", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/asr-structs_03-0cef911.stdout b/tests/reference/asr-structs_03-0cef911.stdout index bde270f2dc..3daa663b51 100644 --- a/tests/reference/asr-structs_03-0cef911.stdout +++ b/tests/reference/asr-structs_03-0cef911.stdout @@ -1 +1 @@ -(TranslationUnit (SymbolTable 1 {_global_symbols: (Module (SymbolTable 7 {A: (StructType (SymbolTable 2 {x: (Variable 2 x [] Local () () Default (Integer 4 []) Source Public Required .false.), y: (Variable 2 y [] Local () () Default (Real 4 []) Source Public Required .false.)}) A [] [x y] Source Public .false. () ()), _lpython_main_program: (Function (SymbolTable 6 {}) _lpython_main_program (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [g] [] [(SubroutineCall 7 g () [] ())] () Public .false. .false.), f: (Function (SymbolTable 3 {pa: (Variable 3 pa [] In () () Default (Pointer (Struct 7 A [])) Source Public Required .false.)}) f (FunctionType [(Pointer (Struct 7 A []))] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 3 pa)] [(Print () [(StructInstanceMember (Var 3 pa) 2 x (Integer 4 []) ())] () ()) (Print () [(StructInstanceMember (Var 3 pa) 2 y (Real 4 []) ())] () ())] () Public .false. .false.), g: (Function (SymbolTable 4 {x: (Variable 4 x [] Local () () Default (Struct 7 A []) Source Public Required .false.), xp: (Variable 4 xp [] Local () () Default (Pointer (Struct 7 A [])) Source Public Required .false.)}) g (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [f] [] [(= (Var 4 x) (StructTypeConstructor 7 A [(IntegerConstant 3 (Integer 4 [])) (Cast (RealConstant 3.250000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 3.250000 (Real 4 [])))] (Struct 7 A []) ()) ()) (= (Var 4 xp) (GetPointer (Var 4 x) (Pointer (Struct 7 A [])) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 4 xp) 2 x (Integer 4 []) ()) Eq (IntegerConstant 3 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (Cast (StructInstanceMember (Var 4 xp) 2 y (Real 4 []) ()) RealToReal (Real 8 []) ()) Eq (RealConstant 3.250000 (Real 8 [])) (Logical 4 []) ()) ()) (= (StructInstanceMember (Var 4 xp) 2 x (Integer 4 []) ()) (IntegerConstant 5 (Integer 4 [])) ()) (= (StructInstanceMember (Var 4 xp) 2 y (Real 4 []) ()) (Cast (RealConstant 5.500000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 5.500000 (Real 4 []))) ()) (SubroutineCall 7 f () [((Var 4 xp))] ())] () Public .false. .false.)}) _global_symbols [] .false. .false.), main_program: (Program (SymbolTable 5 {_lpython_main_program: (ExternalSymbol 5 _lpython_main_program 7 _lpython_main_program _global_symbols [] _lpython_main_program Public)}) main_program [_global_symbols] [(SubroutineCall 5 _lpython_main_program () [] ())])}) []) +(TranslationUnit (SymbolTable 1 {_global_symbols: (Module (SymbolTable 7 {A: (StructType (SymbolTable 2 {x: (Variable 2 x [] Local () () Default (Integer 4 []) Source Public Required .false.), y: (Variable 2 y [] Local () () Default (Real 4 []) Source Public Required .false.)}) A [] [x y] Source Public .false. () ()), _lpython_main_program: (Function (SymbolTable 6 {}) _lpython_main_program (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [g] [] [(SubroutineCall 7 g () [] ())] () Public .false. .false.), f: (Function (SymbolTable 3 {pa: (Variable 3 pa [] In () () Default (Pointer (Struct 7 A [])) Source Public Required .false.)}) f (FunctionType [(Pointer (Struct 7 A []))] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 3 pa)] [(Print () [(StructInstanceMember (Var 3 pa) 2 x (Integer 4 []) ())] () ()) (Print () [(StructInstanceMember (Var 3 pa) 2 y (Real 4 []) ())] () ())] () Public .false. .false.), g: (Function (SymbolTable 4 {x: (Variable 4 x [] Local () () Default (Struct 7 A []) Source Public Required .false.), xp: (Variable 4 xp [] Local () () Default (Pointer (Struct 7 A [])) Source Public Required .false.)}) g (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [f] [] [(= (Var 4 x) (StructTypeConstructor 7 A [((IntegerConstant 3 (Integer 4 []))) ((Cast (RealConstant 3.250000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 3.250000 (Real 4 []))))] (Struct 7 A []) ()) ()) (= (Var 4 xp) (GetPointer (Var 4 x) (Pointer (Struct 7 A [])) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 4 xp) 2 x (Integer 4 []) ()) Eq (IntegerConstant 3 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (Cast (StructInstanceMember (Var 4 xp) 2 y (Real 4 []) ()) RealToReal (Real 8 []) ()) Eq (RealConstant 3.250000 (Real 8 [])) (Logical 4 []) ()) ()) (= (StructInstanceMember (Var 4 xp) 2 x (Integer 4 []) ()) (IntegerConstant 5 (Integer 4 [])) ()) (= (StructInstanceMember (Var 4 xp) 2 y (Real 4 []) ()) (Cast (RealConstant 5.500000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 5.500000 (Real 4 []))) ()) (SubroutineCall 7 f () [((Var 4 xp))] ())] () Public .false. .false.)}) _global_symbols [] .false. .false.), main_program: (Program (SymbolTable 5 {_lpython_main_program: (ExternalSymbol 5 _lpython_main_program 7 _lpython_main_program _global_symbols [] _lpython_main_program Public)}) main_program [_global_symbols] [(SubroutineCall 5 _lpython_main_program () [] ())])}) []) diff --git a/tests/reference/asr-structs_04-387747b.json b/tests/reference/asr-structs_04-387747b.json index 56b202b367..4366bfe4fd 100644 --- a/tests/reference/asr-structs_04-387747b.json +++ b/tests/reference/asr-structs_04-387747b.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "asr-structs_04-387747b.stdout", - "stdout_hash": "4c781c5f2d3fe44166b39d672854919409d7390fcd4d39e3afe7700e", + "stdout_hash": "fe42ef6eccb8a49bb420bfef442da81febf0ce1effb954772be70b3b", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/asr-structs_04-387747b.stdout b/tests/reference/asr-structs_04-387747b.stdout index b299465bda..e8ddc795b6 100644 --- a/tests/reference/asr-structs_04-387747b.stdout +++ b/tests/reference/asr-structs_04-387747b.stdout @@ -1 +1 @@ -(TranslationUnit (SymbolTable 1 {_global_symbols: (Module (SymbolTable 8 {A: (StructType (SymbolTable 2 {x: (Variable 2 x [] Local () () Default (Integer 4 []) Source Public Required .false.), y: (Variable 2 y [] Local () () Default (Real 4 []) Source Public Required .false.)}) A [] [y x] Source Public .false. () ()), B: (StructType (SymbolTable 3 {a: (Variable 3 a [] Local () () Default (Struct 8 A []) Source Public Required .false.), z: (Variable 3 z [] Local () () Default (Integer 4 []) Source Public Required .false.)}) B [A] [a z] Source Public .false. () ()), _lpython_main_program: (Function (SymbolTable 7 {}) _lpython_main_program (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [g] [] [(SubroutineCall 8 g () [] ())] () Public .false. .false.), f: (Function (SymbolTable 4 {b: (Variable 4 b [] In () () Default (Struct 8 B []) Source Public Required .false.)}) f (FunctionType [(Struct 8 B [])] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 4 b)] [(Print () [(StructInstanceMember (Var 4 b) 3 z (Integer 4 []) ()) (StructInstanceMember (StructInstanceMember (Var 4 b) 3 a (Struct 8 A []) ()) 2 x (Integer 4 []) ()) (StructInstanceMember (StructInstanceMember (Var 4 b) 3 a (Struct 8 A []) ()) 2 y (Real 4 []) ())] () ()) (Assert (IntegerCompare (StructInstanceMember (Var 4 b) 3 z (Integer 4 []) ()) Eq (IntegerConstant 1 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (StructInstanceMember (Var 4 b) 3 a (Struct 8 A []) ()) 2 x (Integer 4 []) ()) Eq (IntegerConstant 2 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (Cast (StructInstanceMember (StructInstanceMember (Var 4 b) 3 a (Struct 8 A []) ()) 2 y (Real 4 []) ()) RealToReal (Real 8 []) ()) Eq (RealConstant 3.000000 (Real 8 [])) (Logical 4 []) ()) ())] () Public .false. .false.), g: (Function (SymbolTable 5 {a1: (Variable 5 a1 [] Local () () Default (Struct 8 A []) Source Public Required .false.), a2: (Variable 5 a2 [] Local () () Default (Struct 8 A []) Source Public Required .false.), b: (Variable 5 b [] Local () () Default (Struct 8 B []) Source Public Required .false.)}) g (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [f] [] [(= (Var 5 a1) (StructTypeConstructor 8 A [(Cast (RealConstant 1.000000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 1.000000 (Real 4 []))) (IntegerConstant 1 (Integer 4 []))] (Struct 8 A []) ()) ()) (= (Var 5 a2) (StructTypeConstructor 8 A [(Cast (RealConstant 2.000000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 2.000000 (Real 4 []))) (IntegerConstant 2 (Integer 4 []))] (Struct 8 A []) ()) ()) (= (Var 5 b) (StructTypeConstructor 8 B [(Var 5 a1) (IntegerConstant 1 (Integer 4 []))] (Struct 8 B []) ()) ()) (= (StructInstanceMember (Var 5 b) 3 a (Struct 8 A []) ()) (Var 5 a2) ()) (= (StructInstanceMember (Var 5 b) 3 z (Integer 4 []) ()) (IntegerConstant 1 (Integer 4 [])) ()) (= (StructInstanceMember (StructInstanceMember (Var 5 b) 3 a (Struct 8 A []) ()) 2 x (Integer 4 []) ()) (IntegerConstant 2 (Integer 4 [])) ()) (= (StructInstanceMember (StructInstanceMember (Var 5 b) 3 a (Struct 8 A []) ()) 2 y (Real 4 []) ()) (Cast (RealConstant 3.000000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 3.000000 (Real 4 []))) ()) (Assert (IntegerCompare (StructInstanceMember (Var 5 a1) 2 x (Integer 4 []) ()) Eq (IntegerConstant 1 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (Cast (StructInstanceMember (Var 5 a1) 2 y (Real 4 []) ()) RealToReal (Real 8 []) ()) Eq (RealConstant 1.000000 (Real 8 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 5 a2) 2 x (Integer 4 []) ()) Eq (IntegerConstant 2 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (Cast (StructInstanceMember (Var 5 a2) 2 y (Real 4 []) ()) RealToReal (Real 8 []) ()) Eq (RealConstant 2.000000 (Real 8 [])) (Logical 4 []) ()) ()) (SubroutineCall 8 f () [((Var 5 b))] ())] () Public .false. .false.)}) _global_symbols [] .false. .false.), main_program: (Program (SymbolTable 6 {_lpython_main_program: (ExternalSymbol 6 _lpython_main_program 8 _lpython_main_program _global_symbols [] _lpython_main_program Public)}) main_program [_global_symbols] [(SubroutineCall 6 _lpython_main_program () [] ())])}) []) +(TranslationUnit (SymbolTable 1 {_global_symbols: (Module (SymbolTable 8 {A: (StructType (SymbolTable 2 {x: (Variable 2 x [] Local () () Default (Integer 4 []) Source Public Required .false.), y: (Variable 2 y [] Local () () Default (Real 4 []) Source Public Required .false.)}) A [] [y x] Source Public .false. () ()), B: (StructType (SymbolTable 3 {a: (Variable 3 a [] Local () () Default (Struct 8 A []) Source Public Required .false.), z: (Variable 3 z [] Local () () Default (Integer 4 []) Source Public Required .false.)}) B [A] [a z] Source Public .false. () ()), _lpython_main_program: (Function (SymbolTable 7 {}) _lpython_main_program (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [g] [] [(SubroutineCall 8 g () [] ())] () Public .false. .false.), f: (Function (SymbolTable 4 {b: (Variable 4 b [] In () () Default (Struct 8 B []) Source Public Required .false.)}) f (FunctionType [(Struct 8 B [])] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 4 b)] [(Print () [(StructInstanceMember (Var 4 b) 3 z (Integer 4 []) ()) (StructInstanceMember (StructInstanceMember (Var 4 b) 3 a (Struct 8 A []) ()) 2 x (Integer 4 []) ()) (StructInstanceMember (StructInstanceMember (Var 4 b) 3 a (Struct 8 A []) ()) 2 y (Real 4 []) ())] () ()) (Assert (IntegerCompare (StructInstanceMember (Var 4 b) 3 z (Integer 4 []) ()) Eq (IntegerConstant 1 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (StructInstanceMember (Var 4 b) 3 a (Struct 8 A []) ()) 2 x (Integer 4 []) ()) Eq (IntegerConstant 2 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (Cast (StructInstanceMember (StructInstanceMember (Var 4 b) 3 a (Struct 8 A []) ()) 2 y (Real 4 []) ()) RealToReal (Real 8 []) ()) Eq (RealConstant 3.000000 (Real 8 [])) (Logical 4 []) ()) ())] () Public .false. .false.), g: (Function (SymbolTable 5 {a1: (Variable 5 a1 [] Local () () Default (Struct 8 A []) Source Public Required .false.), a2: (Variable 5 a2 [] Local () () Default (Struct 8 A []) Source Public Required .false.), b: (Variable 5 b [] Local () () Default (Struct 8 B []) Source Public Required .false.)}) g (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [f] [] [(= (Var 5 a1) (StructTypeConstructor 8 A [((Cast (RealConstant 1.000000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 1.000000 (Real 4 [])))) ((IntegerConstant 1 (Integer 4 [])))] (Struct 8 A []) ()) ()) (= (Var 5 a2) (StructTypeConstructor 8 A [((Cast (RealConstant 2.000000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 2.000000 (Real 4 [])))) ((IntegerConstant 2 (Integer 4 [])))] (Struct 8 A []) ()) ()) (= (Var 5 b) (StructTypeConstructor 8 B [((Var 5 a1)) ((IntegerConstant 1 (Integer 4 [])))] (Struct 8 B []) ()) ()) (= (StructInstanceMember (Var 5 b) 3 a (Struct 8 A []) ()) (Var 5 a2) ()) (= (StructInstanceMember (Var 5 b) 3 z (Integer 4 []) ()) (IntegerConstant 1 (Integer 4 [])) ()) (= (StructInstanceMember (StructInstanceMember (Var 5 b) 3 a (Struct 8 A []) ()) 2 x (Integer 4 []) ()) (IntegerConstant 2 (Integer 4 [])) ()) (= (StructInstanceMember (StructInstanceMember (Var 5 b) 3 a (Struct 8 A []) ()) 2 y (Real 4 []) ()) (Cast (RealConstant 3.000000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 3.000000 (Real 4 []))) ()) (Assert (IntegerCompare (StructInstanceMember (Var 5 a1) 2 x (Integer 4 []) ()) Eq (IntegerConstant 1 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (Cast (StructInstanceMember (Var 5 a1) 2 y (Real 4 []) ()) RealToReal (Real 8 []) ()) Eq (RealConstant 1.000000 (Real 8 [])) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 5 a2) 2 x (Integer 4 []) ()) Eq (IntegerConstant 2 (Integer 4 [])) (Logical 4 []) ()) ()) (Assert (RealCompare (Cast (StructInstanceMember (Var 5 a2) 2 y (Real 4 []) ()) RealToReal (Real 8 []) ()) Eq (RealConstant 2.000000 (Real 8 [])) (Logical 4 []) ()) ()) (SubroutineCall 8 f () [((Var 5 b))] ())] () Public .false. .false.)}) _global_symbols [] .false. .false.), main_program: (Program (SymbolTable 6 {_lpython_main_program: (ExternalSymbol 6 _lpython_main_program 8 _lpython_main_program _global_symbols [] _lpython_main_program Public)}) main_program [_global_symbols] [(SubroutineCall 6 _lpython_main_program () [] ())])}) []) diff --git a/tests/reference/asr-structs_05-fa98307.json b/tests/reference/asr-structs_05-fa98307.json index 525b15f15a..a1ae8fc896 100644 --- a/tests/reference/asr-structs_05-fa98307.json +++ b/tests/reference/asr-structs_05-fa98307.json @@ -6,7 +6,7 @@ "outfile": null, "outfile_hash": null, "stdout": "asr-structs_05-fa98307.stdout", - "stdout_hash": "38287e71f5fc2fade1fb6e177e28cc6cd6c36e46260cebbb29ff2092", + "stdout_hash": "acb6eb72e1e3732bb66b33eb33a99d2019fa60d34ef928f9e5856f5f", "stderr": null, "stderr_hash": null, "returncode": 0 diff --git a/tests/reference/asr-structs_05-fa98307.stdout b/tests/reference/asr-structs_05-fa98307.stdout index 1c6b74737a..d0ed57fd8f 100644 --- a/tests/reference/asr-structs_05-fa98307.stdout +++ b/tests/reference/asr-structs_05-fa98307.stdout @@ -1 +1 @@ -(TranslationUnit (SymbolTable 1 {_global_symbols: (Module (SymbolTable 107 {A: (StructType (SymbolTable 2 {a: (Variable 2 a [] Local () () Default (Real 4 []) Source Public Required .false.), b: (Variable 2 b [] Local () () Default (Integer 2 []) Source Public Required .false.), c: (Variable 2 c [] Local () () Default (Integer 1 []) Source Public Required .false.), d: (Variable 2 d [] Local () () Default (Logical 4 []) Source Public Required .false.), x: (Variable 2 x [] Local () () Default (Integer 4 []) Source Public Required .false.), y: (Variable 2 y [] Local () () Default (Real 8 []) Source Public Required .false.), z: (Variable 2 z [] Local () () Default (Integer 8 []) Source Public Required .false.)}) A [] [y x z a b c d] Source Public .false. () ()), _lpython_main_program: (Function (SymbolTable 106 {}) _lpython_main_program (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [g] [] [(SubroutineCall 107 g () [] ())] () Public .false. .false.), g: (Function (SymbolTable 6 {y: (Variable 6 y [] Local () () Default (Struct 107 A [((IntegerConstant 0 (Integer 4 [])) (IntegerConstant 2 (Integer 4 [])))]) Source Public Required .false.)}) g (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [verify update_1 update_2 verify] [] [(= (ArrayItem (Var 6 y) [(() (IntegerConstant 0 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) (StructTypeConstructor 107 A [(RealConstant 1.100000 (Real 8 [])) (IntegerConstant 1 (Integer 4 [])) (Cast (IntegerConstant 1 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 1 (Integer 8 []))) (Cast (RealConstant 1.100000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 1.100000 (Real 4 []))) (Cast (IntegerConstant 1 (Integer 4 [])) IntegerToInteger (Integer 2 []) (IntegerConstant 1 (Integer 2 []))) (Cast (IntegerConstant 1 (Integer 4 [])) IntegerToInteger (Integer 1 []) (IntegerConstant 1 (Integer 1 []))) (LogicalConstant .true. (Logical 4 []))] (Struct 107 A []) ()) ()) (= (ArrayItem (Var 6 y) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) (StructTypeConstructor 107 A [(RealConstant 2.200000 (Real 8 [])) (IntegerConstant 2 (Integer 4 [])) (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 2 (Integer 8 []))) (Cast (RealConstant 2.200000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 2.200000 (Real 4 []))) (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 2 []) (IntegerConstant 2 (Integer 2 []))) (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 1 []) (IntegerConstant 2 (Integer 1 []))) (LogicalConstant .true. (Logical 4 []))] (Struct 107 A []) ()) ()) (SubroutineCall 107 verify () [((Var 6 y)) ((IntegerConstant 1 (Integer 4 []))) ((RealConstant 1.100000 (Real 8 []))) ((IntegerConstant 2 (Integer 4 []))) ((RealConstant 2.200000 (Real 8 [])))] ()) (SubroutineCall 107 update_1 () [((ArrayItem (Var 6 y) [(() (IntegerConstant 0 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()))] ()) (SubroutineCall 107 update_2 () [((Var 6 y))] ()) (SubroutineCall 107 verify () [((Var 6 y)) ((IntegerConstant 2 (Integer 4 []))) ((RealConstant 1.200000 (Real 8 []))) ((IntegerConstant 3 (Integer 4 []))) ((RealConstant 2.300000 (Real 8 [])))] ())] () Public .false. .false.), update_1: (Function (SymbolTable 4 {s: (Variable 4 s [] In () () Default (Struct 107 A []) Source Public Required .false.)}) update_1 (FunctionType [(Struct 107 A [])] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 4 s)] [(= (StructInstanceMember (Var 4 s) 2 x (Integer 4 []) ()) (IntegerConstant 2 (Integer 4 [])) ()) (= (StructInstanceMember (Var 4 s) 2 y (Real 8 []) ()) (RealConstant 1.200000 (Real 8 [])) ()) (= (StructInstanceMember (Var 4 s) 2 z (Integer 8 []) ()) (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 2 (Integer 8 []))) ()) (= (StructInstanceMember (Var 4 s) 2 a (Real 4 []) ()) (Cast (RealConstant 1.200000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 1.200000 (Real 4 []))) ()) (= (StructInstanceMember (Var 4 s) 2 b (Integer 2 []) ()) (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 2 []) (IntegerConstant 2 (Integer 2 []))) ()) (= (StructInstanceMember (Var 4 s) 2 c (Integer 1 []) ()) (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 1 []) (IntegerConstant 2 (Integer 1 []))) ())] () Public .false. .false.), update_2: (Function (SymbolTable 5 {s: (Variable 5 s [] InOut () () Default (Struct 107 A [(() ())]) Source Public Required .false.)}) update_2 (FunctionType [(Struct 107 A [(() ())])] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 5 s)] [(= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) 2 x (Integer 4 []) ()) (IntegerConstant 3 (Integer 4 [])) ()) (= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) 2 y (Real 8 []) ()) (RealConstant 2.300000 (Real 8 [])) ()) (= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) 2 z (Integer 8 []) ()) (Cast (IntegerConstant 3 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 3 (Integer 8 []))) ()) (= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) 2 a (Real 4 []) ()) (Cast (RealConstant 2.300000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 2.300000 (Real 4 []))) ()) (= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) 2 b (Integer 2 []) ()) (Cast (IntegerConstant 3 (Integer 4 [])) IntegerToInteger (Integer 2 []) (IntegerConstant 3 (Integer 2 []))) ()) (= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) 2 c (Integer 1 []) ()) (Cast (IntegerConstant 3 (Integer 4 [])) IntegerToInteger (Integer 1 []) (IntegerConstant 3 (Integer 1 []))) ())] () Public .false. .false.), verify: (Function (SymbolTable 3 {abs: (ExternalSymbol 3 abs 8 abs lpython_builtin [] abs Private), abs@__lpython_overloaded_0__abs: (ExternalSymbol 3 abs@__lpython_overloaded_0__abs 8 __lpython_overloaded_0__abs lpython_builtin [] __lpython_overloaded_0__abs Public), abs@__lpython_overloaded_1__abs: (ExternalSymbol 3 abs@__lpython_overloaded_1__abs 8 __lpython_overloaded_1__abs lpython_builtin [] __lpython_overloaded_1__abs Public), eps: (Variable 3 eps [] Local (RealConstant 0.000000 (Real 8 [])) () Default (Real 8 []) Source Public Required .false.), s: (Variable 3 s [] InOut () () Default (Struct 107 A [(() ())]) Source Public Required .false.), s0: (Variable 3 s0 [] Local () () Default (Struct 107 A []) Source Public Required .false.), s1: (Variable 3 s1 [] Local () () Default (Struct 107 A []) Source Public Required .false.), x1: (Variable 3 x1 [] In () () Default (Integer 4 []) Source Public Required .false.), x2: (Variable 3 x2 [] In () () Default (Integer 4 []) Source Public Required .false.), y1: (Variable 3 y1 [] In () () Default (Real 8 []) Source Public Required .false.), y2: (Variable 3 y2 [] In () () Default (Real 8 []) Source Public Required .false.)}) verify (FunctionType [(Struct 107 A [(() ())]) (Integer 4 []) (Real 8 []) (Integer 4 []) (Real 8 [])] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [abs@__lpython_overloaded_0__abs abs@__lpython_overloaded_1__abs abs@__lpython_overloaded_0__abs abs@__lpython_overloaded_1__abs] [(Var 3 s) (Var 3 x1) (Var 3 y1) (Var 3 x2) (Var 3 y2)] [(= (Var 3 eps) (RealConstant 0.000000 (Real 8 [])) ()) (= (Var 3 s0) (ArrayItem (Var 3 s) [(() (IntegerConstant 0 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) ()) (Print () [(StructInstanceMember (Var 3 s0) 2 x (Integer 4 []) ()) (StructInstanceMember (Var 3 s0) 2 y (Real 8 []) ()) (StructInstanceMember (Var 3 s0) 2 z (Integer 8 []) ()) (StructInstanceMember (Var 3 s0) 2 a (Real 4 []) ()) (StructInstanceMember (Var 3 s0) 2 b (Integer 2 []) ()) (StructInstanceMember (Var 3 s0) 2 c (Integer 1 []) ()) (StructInstanceMember (Var 3 s0) 2 d (Logical 4 []) ())] () ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s0) 2 x (Integer 4 []) ()) Eq (Var 3 x1) (Logical 4 []) ()) ()) (Assert (RealCompare (FunctionCall 3 abs@__lpython_overloaded_0__abs 3 abs [((RealBinOp (StructInstanceMember (Var 3 s0) 2 y (Real 8 []) ()) Sub (Var 3 y1) (Real 8 []) ()))] (Real 8 []) () ()) Lt (Var 3 eps) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s0) 2 z (Integer 8 []) ()) Eq (Cast (Var 3 x1) IntegerToInteger (Integer 8 []) ()) (Logical 4 []) ()) ()) (Assert (RealCompare (FunctionCall 3 abs@__lpython_overloaded_1__abs 3 abs [((RealBinOp (StructInstanceMember (Var 3 s0) 2 a (Real 4 []) ()) Sub (Cast (Var 3 y1) RealToReal (Real 4 []) ()) (Real 4 []) ()))] (Real 4 []) () ()) Lt (Cast (RealConstant 0.000001 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 0.000001 (Real 4 []))) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s0) 2 b (Integer 2 []) ()) Eq (Cast (Var 3 x1) IntegerToInteger (Integer 2 []) ()) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s0) 2 c (Integer 1 []) ()) Eq (Cast (Var 3 x1) IntegerToInteger (Integer 1 []) ()) (Logical 4 []) ()) ()) (Assert (StructInstanceMember (Var 3 s0) 2 d (Logical 4 []) ()) ()) (= (Var 3 s1) (ArrayItem (Var 3 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) ()) (Print () [(StructInstanceMember (Var 3 s1) 2 x (Integer 4 []) ()) (StructInstanceMember (Var 3 s1) 2 y (Real 8 []) ()) (StructInstanceMember (Var 3 s1) 2 z (Integer 8 []) ()) (StructInstanceMember (Var 3 s1) 2 a (Real 4 []) ()) (StructInstanceMember (Var 3 s1) 2 b (Integer 2 []) ()) (StructInstanceMember (Var 3 s1) 2 c (Integer 1 []) ()) (StructInstanceMember (Var 3 s1) 2 d (Logical 4 []) ())] () ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s1) 2 x (Integer 4 []) ()) Eq (Var 3 x2) (Logical 4 []) ()) ()) (Assert (RealCompare (FunctionCall 3 abs@__lpython_overloaded_0__abs 3 abs [((RealBinOp (StructInstanceMember (Var 3 s1) 2 y (Real 8 []) ()) Sub (Var 3 y2) (Real 8 []) ()))] (Real 8 []) () ()) Lt (Var 3 eps) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s1) 2 z (Integer 8 []) ()) Eq (Cast (Var 3 x2) IntegerToInteger (Integer 8 []) ()) (Logical 4 []) ()) ()) (Assert (RealCompare (FunctionCall 3 abs@__lpython_overloaded_1__abs 3 abs [((RealBinOp (StructInstanceMember (Var 3 s1) 2 a (Real 4 []) ()) Sub (Cast (Var 3 y2) RealToReal (Real 4 []) ()) (Real 4 []) ()))] (Real 4 []) () ()) Lt (Cast (RealConstant 0.000001 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 0.000001 (Real 4 []))) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s1) 2 b (Integer 2 []) ()) Eq (Cast (Var 3 x2) IntegerToInteger (Integer 2 []) ()) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s1) 2 c (Integer 1 []) ()) Eq (Cast (Var 3 x2) IntegerToInteger (Integer 1 []) ()) (Logical 4 []) ()) ()) (Assert (StructInstanceMember (Var 3 s1) 2 d (Logical 4 []) ()) ())] () Public .false. .false.)}) _global_symbols [lpython_builtin] .false. .false.), lpython_builtin: (IntrinsicModule lpython_builtin), main_program: (Program (SymbolTable 105 {_lpython_main_program: (ExternalSymbol 105 _lpython_main_program 107 _lpython_main_program _global_symbols [] _lpython_main_program Public)}) main_program [_global_symbols] [(SubroutineCall 105 _lpython_main_program () [] ())])}) []) +(TranslationUnit (SymbolTable 1 {_global_symbols: (Module (SymbolTable 107 {A: (StructType (SymbolTable 2 {a: (Variable 2 a [] Local () () Default (Real 4 []) Source Public Required .false.), b: (Variable 2 b [] Local () () Default (Integer 2 []) Source Public Required .false.), c: (Variable 2 c [] Local () () Default (Integer 1 []) Source Public Required .false.), d: (Variable 2 d [] Local () () Default (Logical 4 []) Source Public Required .false.), x: (Variable 2 x [] Local () () Default (Integer 4 []) Source Public Required .false.), y: (Variable 2 y [] Local () () Default (Real 8 []) Source Public Required .false.), z: (Variable 2 z [] Local () () Default (Integer 8 []) Source Public Required .false.)}) A [] [y x z a b c d] Source Public .false. () ()), _lpython_main_program: (Function (SymbolTable 106 {}) _lpython_main_program (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [g] [] [(SubroutineCall 107 g () [] ())] () Public .false. .false.), g: (Function (SymbolTable 6 {y: (Variable 6 y [] Local () () Default (Struct 107 A [((IntegerConstant 0 (Integer 4 [])) (IntegerConstant 2 (Integer 4 [])))]) Source Public Required .false.)}) g (FunctionType [] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [verify update_1 update_2 verify] [] [(= (ArrayItem (Var 6 y) [(() (IntegerConstant 0 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) (StructTypeConstructor 107 A [((RealConstant 1.100000 (Real 8 []))) ((IntegerConstant 1 (Integer 4 []))) ((Cast (IntegerConstant 1 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 1 (Integer 8 [])))) ((Cast (RealConstant 1.100000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 1.100000 (Real 4 [])))) ((Cast (IntegerConstant 1 (Integer 4 [])) IntegerToInteger (Integer 2 []) (IntegerConstant 1 (Integer 2 [])))) ((Cast (IntegerConstant 1 (Integer 4 [])) IntegerToInteger (Integer 1 []) (IntegerConstant 1 (Integer 1 [])))) ((LogicalConstant .true. (Logical 4 [])))] (Struct 107 A []) ()) ()) (= (ArrayItem (Var 6 y) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) (StructTypeConstructor 107 A [((RealConstant 2.200000 (Real 8 []))) ((IntegerConstant 2 (Integer 4 []))) ((Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 2 (Integer 8 [])))) ((Cast (RealConstant 2.200000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 2.200000 (Real 4 [])))) ((Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 2 []) (IntegerConstant 2 (Integer 2 [])))) ((Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 1 []) (IntegerConstant 2 (Integer 1 [])))) ((LogicalConstant .true. (Logical 4 [])))] (Struct 107 A []) ()) ()) (SubroutineCall 107 verify () [((Var 6 y)) ((IntegerConstant 1 (Integer 4 []))) ((RealConstant 1.100000 (Real 8 []))) ((IntegerConstant 2 (Integer 4 []))) ((RealConstant 2.200000 (Real 8 [])))] ()) (SubroutineCall 107 update_1 () [((ArrayItem (Var 6 y) [(() (IntegerConstant 0 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()))] ()) (SubroutineCall 107 update_2 () [((Var 6 y))] ()) (SubroutineCall 107 verify () [((Var 6 y)) ((IntegerConstant 2 (Integer 4 []))) ((RealConstant 1.200000 (Real 8 []))) ((IntegerConstant 3 (Integer 4 []))) ((RealConstant 2.300000 (Real 8 [])))] ())] () Public .false. .false.), update_1: (Function (SymbolTable 4 {s: (Variable 4 s [] In () () Default (Struct 107 A []) Source Public Required .false.)}) update_1 (FunctionType [(Struct 107 A [])] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 4 s)] [(= (StructInstanceMember (Var 4 s) 2 x (Integer 4 []) ()) (IntegerConstant 2 (Integer 4 [])) ()) (= (StructInstanceMember (Var 4 s) 2 y (Real 8 []) ()) (RealConstant 1.200000 (Real 8 [])) ()) (= (StructInstanceMember (Var 4 s) 2 z (Integer 8 []) ()) (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 2 (Integer 8 []))) ()) (= (StructInstanceMember (Var 4 s) 2 a (Real 4 []) ()) (Cast (RealConstant 1.200000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 1.200000 (Real 4 []))) ()) (= (StructInstanceMember (Var 4 s) 2 b (Integer 2 []) ()) (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 2 []) (IntegerConstant 2 (Integer 2 []))) ()) (= (StructInstanceMember (Var 4 s) 2 c (Integer 1 []) ()) (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 1 []) (IntegerConstant 2 (Integer 1 []))) ())] () Public .false. .false.), update_2: (Function (SymbolTable 5 {s: (Variable 5 s [] InOut () () Default (Struct 107 A [(() ())]) Source Public Required .false.)}) update_2 (FunctionType [(Struct 107 A [(() ())])] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [] [(Var 5 s)] [(= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) 2 x (Integer 4 []) ()) (IntegerConstant 3 (Integer 4 [])) ()) (= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) 2 y (Real 8 []) ()) (RealConstant 2.300000 (Real 8 [])) ()) (= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) 2 z (Integer 8 []) ()) (Cast (IntegerConstant 3 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 3 (Integer 8 []))) ()) (= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) 2 a (Real 4 []) ()) (Cast (RealConstant 2.300000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 2.300000 (Real 4 []))) ()) (= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) 2 b (Integer 2 []) ()) (Cast (IntegerConstant 3 (Integer 4 [])) IntegerToInteger (Integer 2 []) (IntegerConstant 3 (Integer 2 []))) ()) (= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) 2 c (Integer 1 []) ()) (Cast (IntegerConstant 3 (Integer 4 [])) IntegerToInteger (Integer 1 []) (IntegerConstant 3 (Integer 1 []))) ())] () Public .false. .false.), verify: (Function (SymbolTable 3 {abs: (ExternalSymbol 3 abs 8 abs lpython_builtin [] abs Private), abs@__lpython_overloaded_0__abs: (ExternalSymbol 3 abs@__lpython_overloaded_0__abs 8 __lpython_overloaded_0__abs lpython_builtin [] __lpython_overloaded_0__abs Public), abs@__lpython_overloaded_1__abs: (ExternalSymbol 3 abs@__lpython_overloaded_1__abs 8 __lpython_overloaded_1__abs lpython_builtin [] __lpython_overloaded_1__abs Public), eps: (Variable 3 eps [] Local (RealConstant 0.000000 (Real 8 [])) () Default (Real 8 []) Source Public Required .false.), s: (Variable 3 s [] InOut () () Default (Struct 107 A [(() ())]) Source Public Required .false.), s0: (Variable 3 s0 [] Local () () Default (Struct 107 A []) Source Public Required .false.), s1: (Variable 3 s1 [] Local () () Default (Struct 107 A []) Source Public Required .false.), x1: (Variable 3 x1 [] In () () Default (Integer 4 []) Source Public Required .false.), x2: (Variable 3 x2 [] In () () Default (Integer 4 []) Source Public Required .false.), y1: (Variable 3 y1 [] In () () Default (Real 8 []) Source Public Required .false.), y2: (Variable 3 y2 [] In () () Default (Real 8 []) Source Public Required .false.)}) verify (FunctionType [(Struct 107 A [(() ())]) (Integer 4 []) (Real 8 []) (Integer 4 []) (Real 8 [])] () Source Implementation () .false. .false. .false. .false. .false. [] [] .false.) [abs@__lpython_overloaded_0__abs abs@__lpython_overloaded_1__abs abs@__lpython_overloaded_0__abs abs@__lpython_overloaded_1__abs] [(Var 3 s) (Var 3 x1) (Var 3 y1) (Var 3 x2) (Var 3 y2)] [(= (Var 3 eps) (RealConstant 0.000000 (Real 8 [])) ()) (= (Var 3 s0) (ArrayItem (Var 3 s) [(() (IntegerConstant 0 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) ()) (Print () [(StructInstanceMember (Var 3 s0) 2 x (Integer 4 []) ()) (StructInstanceMember (Var 3 s0) 2 y (Real 8 []) ()) (StructInstanceMember (Var 3 s0) 2 z (Integer 8 []) ()) (StructInstanceMember (Var 3 s0) 2 a (Real 4 []) ()) (StructInstanceMember (Var 3 s0) 2 b (Integer 2 []) ()) (StructInstanceMember (Var 3 s0) 2 c (Integer 1 []) ()) (StructInstanceMember (Var 3 s0) 2 d (Logical 4 []) ())] () ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s0) 2 x (Integer 4 []) ()) Eq (Var 3 x1) (Logical 4 []) ()) ()) (Assert (RealCompare (FunctionCall 3 abs@__lpython_overloaded_0__abs 3 abs [((RealBinOp (StructInstanceMember (Var 3 s0) 2 y (Real 8 []) ()) Sub (Var 3 y1) (Real 8 []) ()))] (Real 8 []) () ()) Lt (Var 3 eps) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s0) 2 z (Integer 8 []) ()) Eq (Cast (Var 3 x1) IntegerToInteger (Integer 8 []) ()) (Logical 4 []) ()) ()) (Assert (RealCompare (FunctionCall 3 abs@__lpython_overloaded_1__abs 3 abs [((RealBinOp (StructInstanceMember (Var 3 s0) 2 a (Real 4 []) ()) Sub (Cast (Var 3 y1) RealToReal (Real 4 []) ()) (Real 4 []) ()))] (Real 4 []) () ()) Lt (Cast (RealConstant 0.000001 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 0.000001 (Real 4 []))) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s0) 2 b (Integer 2 []) ()) Eq (Cast (Var 3 x1) IntegerToInteger (Integer 2 []) ()) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s0) 2 c (Integer 1 []) ()) Eq (Cast (Var 3 x1) IntegerToInteger (Integer 1 []) ()) (Logical 4 []) ()) ()) (Assert (StructInstanceMember (Var 3 s0) 2 d (Logical 4 []) ()) ()) (= (Var 3 s1) (ArrayItem (Var 3 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 107 A []) RowMajor ()) ()) (Print () [(StructInstanceMember (Var 3 s1) 2 x (Integer 4 []) ()) (StructInstanceMember (Var 3 s1) 2 y (Real 8 []) ()) (StructInstanceMember (Var 3 s1) 2 z (Integer 8 []) ()) (StructInstanceMember (Var 3 s1) 2 a (Real 4 []) ()) (StructInstanceMember (Var 3 s1) 2 b (Integer 2 []) ()) (StructInstanceMember (Var 3 s1) 2 c (Integer 1 []) ()) (StructInstanceMember (Var 3 s1) 2 d (Logical 4 []) ())] () ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s1) 2 x (Integer 4 []) ()) Eq (Var 3 x2) (Logical 4 []) ()) ()) (Assert (RealCompare (FunctionCall 3 abs@__lpython_overloaded_0__abs 3 abs [((RealBinOp (StructInstanceMember (Var 3 s1) 2 y (Real 8 []) ()) Sub (Var 3 y2) (Real 8 []) ()))] (Real 8 []) () ()) Lt (Var 3 eps) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s1) 2 z (Integer 8 []) ()) Eq (Cast (Var 3 x2) IntegerToInteger (Integer 8 []) ()) (Logical 4 []) ()) ()) (Assert (RealCompare (FunctionCall 3 abs@__lpython_overloaded_1__abs 3 abs [((RealBinOp (StructInstanceMember (Var 3 s1) 2 a (Real 4 []) ()) Sub (Cast (Var 3 y2) RealToReal (Real 4 []) ()) (Real 4 []) ()))] (Real 4 []) () ()) Lt (Cast (RealConstant 0.000001 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 0.000001 (Real 4 []))) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s1) 2 b (Integer 2 []) ()) Eq (Cast (Var 3 x2) IntegerToInteger (Integer 2 []) ()) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s1) 2 c (Integer 1 []) ()) Eq (Cast (Var 3 x2) IntegerToInteger (Integer 1 []) ()) (Logical 4 []) ()) ()) (Assert (StructInstanceMember (Var 3 s1) 2 d (Logical 4 []) ()) ())] () Public .false. .false.)}) _global_symbols [lpython_builtin] .false. .false.), lpython_builtin: (IntrinsicModule lpython_builtin), main_program: (Program (SymbolTable 105 {_lpython_main_program: (ExternalSymbol 105 _lpython_main_program 107 _lpython_main_program _global_symbols [] _lpython_main_program Public)}) main_program [_global_symbols] [(SubroutineCall 105 _lpython_main_program () [] ())])}) [])