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