1 #ifndef STAN_LANG_AST_SCOPE_DEF_HPP 2 #define STAN_LANG_AST_SCOPE_DEF_HPP 3 4 #include <stan/lang/ast/origin_block.hpp> 5 #include <stan/lang/ast/scope.hpp> 6 7 namespace stan { 8 namespace lang { 9 scope()10 scope::scope() : program_block_(model_name_origin), is_local_(false) { } 11 scope(const origin_block & program_block)12 scope::scope(const origin_block& program_block) 13 : program_block_(program_block), is_local_(false) { } 14 scope(const origin_block & program_block,const bool & is_local)15 scope::scope(const origin_block& program_block, 16 const bool& is_local) 17 : program_block_(program_block), is_local_(is_local) { } 18 19 program_block() const20 origin_block scope::program_block() const { 21 return program_block_; 22 } 23 is_local() const24 bool scope::is_local() const { 25 return is_local_; 26 } 27 local_allows_var() const28 bool scope::local_allows_var() const { 29 return is_local_ 30 && program_block_ != transformed_data_origin 31 && program_block_ != derived_origin; 32 } 33 par_or_tpar() const34 bool scope::par_or_tpar() const { 35 return !is_local_ 36 && (program_block_ == parameter_origin 37 || program_block_ == transformed_parameter_origin); 38 } 39 tpar() const40 bool scope::tpar() const { 41 return program_block_ == transformed_parameter_origin; 42 } 43 fun() const44 bool scope::fun() const { 45 return program_block_ == function_argument_origin 46 || program_block_ == function_argument_origin_lp 47 || program_block_ == function_argument_origin_rng 48 || program_block_ == void_function_argument_origin 49 || program_block_ == void_function_argument_origin_lp 50 || program_block_ == void_function_argument_origin_rng; 51 } 52 non_void_fun() const53 bool scope::non_void_fun() const { 54 return program_block_ == function_argument_origin 55 || program_block_ == function_argument_origin_lp 56 || program_block_ == function_argument_origin_rng; 57 } 58 void_fun() const59 bool scope::void_fun() const { 60 return program_block_ == void_function_argument_origin 61 || program_block_ == void_function_argument_origin_lp 62 || program_block_ == void_function_argument_origin_rng; 63 } 64 allows_assignment() const65 bool scope::allows_assignment() const { 66 return !(program_block_ == data_origin 67 || program_block_ == parameter_origin); 68 } 69 allows_lp_fun() const70 bool scope::allows_lp_fun() const { 71 return program_block_ == model_name_origin 72 || program_block_ == transformed_parameter_origin 73 || program_block_ == function_argument_origin_lp 74 || program_block_ == void_function_argument_origin_lp; 75 } 76 allows_rng() const77 bool scope::allows_rng() const { 78 return program_block_ == derived_origin 79 || program_block_ == transformed_data_origin 80 || program_block_ == function_argument_origin_rng 81 || program_block_ == void_function_argument_origin_rng; 82 } 83 allows_sampling() const84 bool scope::allows_sampling() const { 85 return program_block_ == model_name_origin 86 || program_block_ == function_argument_origin_lp 87 || program_block_ == void_function_argument_origin_lp; 88 } 89 allows_size() const90 bool scope::allows_size() const { 91 return is_local_ 92 || program_block_ == data_origin 93 || program_block_ == transformed_data_origin 94 || program_block_ == function_argument_origin 95 || program_block_ == function_argument_origin_lp 96 || program_block_ == function_argument_origin_rng 97 || program_block_ == void_function_argument_origin 98 || program_block_ == void_function_argument_origin_lp 99 || program_block_ == void_function_argument_origin_rng; 100 } 101 } 102 } 103 #endif 104