MCPcopy Create free account
hub / github.com/Redot-Engine/redot-engine / parse_property_setter

Method parse_property_setter

modules/gdscript/gdscript_parser.cpp:1284–1331  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1282}
1283
1284void GDScriptParser::parse_property_setter(VariableNode *p_variable) {
1285 switch (p_variable->property) {
1286 case VariableNode::PROP_INLINE: {
1287 FunctionNode *function = alloc_node<FunctionNode>();
1288 IdentifierNode *identifier = alloc_node<IdentifierNode>();
1289 complete_extents(identifier);
1290 identifier->name = "@" + p_variable->identifier->name + "_setter";
1291 function->identifier = identifier;
1292 function->is_static = p_variable->is_static;
1293
1294 consume(GDScriptTokenizer::Token::PARENTHESIS_OPEN, R"(Expected "(" after "set".)");
1295
1296 ParameterNode *parameter = alloc_node<ParameterNode>();
1297 if (consume(GDScriptTokenizer::Token::IDENTIFIER, R"(Expected parameter name after "(".)")) {
1298 reset_extents(parameter, previous);
1299 p_variable->setter_parameter = parse_identifier();
1300 parameter->identifier = p_variable->setter_parameter;
1301 function->parameters_indices[parameter->identifier->name] = 0;
1302 function->parameters.push_back(parameter);
1303 }
1304 complete_extents(parameter);
1305
1306 consume(GDScriptTokenizer::Token::PARENTHESIS_CLOSE, R"*(Expected ")" after parameter name.)*");
1307 consume(GDScriptTokenizer::Token::COLON, R"*(Expected ":" after ")".)*");
1308
1309 FunctionNode *previous_function = current_function;
1310 current_function = function;
1311 if (p_variable->setter_parameter != nullptr) {
1312 SuiteNode *body = alloc_node<SuiteNode>();
1313 body->add_local(parameter, function);
1314 function->body = parse_suite("setter declaration", body);
1315 p_variable->setter = function;
1316 }
1317 current_function = previous_function;
1318 complete_extents(function);
1319 break;
1320 }
1321 case VariableNode::PROP_SETGET:
1322 consume(GDScriptTokenizer::Token::EQUAL, R"(Expected "=" after "set")");
1323 make_completion_context(COMPLETION_PROPERTY_METHOD, p_variable);
1324 if (consume(GDScriptTokenizer::Token::IDENTIFIER, R"(Expected setter function name after "=".)")) {
1325 p_variable->setter_pointer = parse_identifier();
1326 }
1327 break;
1328 case VariableNode::PROP_NONE:
1329 break; // Unreachable.
1330 }
1331}
1332
1333void GDScriptParser::parse_property_getter(VariableNode *p_variable) {
1334 switch (p_variable->property) {

Callers

nothing calls this directly

Calls 2

push_backMethod · 0.45
add_localMethod · 0.45

Tested by

no test coverage detected