MCPcopy Create free account
hub / github.com/covscript/covscript / parse_dot

Method parse_dot

sources/instance/runtime.cpp:138–184  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

136 }
137
138 var runtime_type::parse_dot(const var &a, token_base *b)
139 {
140 if (a.is_type_of<constant_values>()) {
141 switch (a.const_val<constant_values>()) {
142 case constant_values::global_namespace:
143 return storage.get_var_global(static_cast<token_id *>(b)->get_id());
144 case constant_values::local_namepace:
145 return storage.get_var_current(static_cast<token_id *>(b)->get_id());
146 default:
147 throw runtime_error("Unknown scope tag.");
148 }
149 }
150 else if (a.is_type_of<namespace_t>())
151 return a.val<namespace_t>()->get_var(static_cast<token_id *>(b)->get_id());
152 else if (a.is_type_of<type_t>())
153 return a.const_val<type_t>().get_var(static_cast<token_id *>(b)->get_id());
154 else if (a.is_type_of<structure>()) {
155 var &val = a.val<structure>().get_var(static_cast<token_id *>(b)->get_id());
156 if (val.is_type_of<callable>() && val.const_val<callable>().is_member_fn())
157 return var::make_protect<object_method>(a, val);
158 else
159 return val;
160 }
161 else {
162 try {
163 var &val = a.get_ext()->get_var(static_cast<token_id *>(b)->get_id());
164 if (val.is_type_of<callable>()) {
165 const callable &func = val.const_val<callable>();
166 switch (func.type()) {
167 case callable::types::member_visitor: {
168 vector args{a};
169 return func.call(args);
170 }
171 case callable::types::force_regular:
172 return val;
173 default:
174 return var::make_protect<object_method>(a, val, func.is_request_fold());
175 }
176 }
177 else
178 return val;
179 }
180 catch (...) {
181 return a.access(static_cast<token_id *>(b)->get_id());
182 }
183 }
184 }
185
186 var runtime_type::parse_arrow(const var &a, token_base *b)
187 {

Callers 1

opt_exprMethod · 0.80

Calls 6

runtime_errorClass · 0.85
is_member_fnMethod · 0.80
typeMethod · 0.80
is_request_foldMethod · 0.80
callMethod · 0.45
accessMethod · 0.45

Tested by

no test coverage detected