Add static type checks in the parser
- Resolve types for all identifiers. - Error when identifier is not found. - Match return type and error when not returning a value when it should. - Check unreachable code (code after sure return). - Match argument count and types for function calls. - Determine if return type of function call matches the assignment. - Do static type check with match statement when possible. - Use type hints to determine export type. - Check compatibility between type hint and explicit export type.
This commit is contained in:
parent
f7793fc5c9
commit
743053734f
9 changed files with 2984 additions and 286 deletions
|
|
@ -193,14 +193,6 @@ static String _parser_expr(const GDScriptParser::Node *p_expr) {
|
|||
case GDScriptParser::OperatorNode::OP_BIT_INVERT: {
|
||||
txt = "~" + _parser_expr(c_node->arguments[0]);
|
||||
} break;
|
||||
case GDScriptParser::OperatorNode::OP_PREINC: {
|
||||
} break;
|
||||
case GDScriptParser::OperatorNode::OP_PREDEC: {
|
||||
} break;
|
||||
case GDScriptParser::OperatorNode::OP_INC: {
|
||||
} break;
|
||||
case GDScriptParser::OperatorNode::OP_DEC: {
|
||||
} break;
|
||||
case GDScriptParser::OperatorNode::OP_IN: {
|
||||
txt = _parser_expr(c_node->arguments[0]) + " in " + _parser_expr(c_node->arguments[1]);
|
||||
} break;
|
||||
|
|
@ -455,10 +447,9 @@ static void _parser_show_class(const GDScriptParser::ClassNode *p_class, int p_i
|
|||
print_line("\n");
|
||||
}
|
||||
|
||||
for (int i = 0; i < p_class->constant_expressions.size(); i++) {
|
||||
|
||||
const GDScriptParser::ClassNode::Constant &constant = p_class->constant_expressions[i];
|
||||
_print_indent(p_indent, "const " + String(constant.identifier) + "=" + _parser_expr(constant.expression));
|
||||
for (Map<StringName, GDScriptParser::ClassNode::Constant>::Element *E = p_class->constant_expressions.front(); E; E = E->next()) {
|
||||
const GDScriptParser::ClassNode::Constant &constant = E->get();
|
||||
_print_indent(p_indent, "const " + String(E->key()) + "=" + _parser_expr(constant.expression));
|
||||
}
|
||||
|
||||
for (int i = 0; i < p_class->variables.size(); i++) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue