mirror of
https://github.com/godotengine/godot.git
synced 2025-10-19 16:03:29 +00:00
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
|
@ -1663,7 +1663,7 @@ MethodInfo GDScriptFunctions::get_info(Function p_func) {
|
|||
|
||||
MethodInfo mi("weakref", PropertyInfo(Variant::OBJECT, "obj"));
|
||||
mi.return_val.type = Variant::OBJECT;
|
||||
mi.return_val.name = "WeakRef";
|
||||
mi.return_val.class_name = "WeakRef";
|
||||
|
||||
return mi;
|
||||
|
||||
|
@ -1672,19 +1672,20 @@ MethodInfo GDScriptFunctions::get_info(Function p_func) {
|
|||
|
||||
MethodInfo mi("funcref", PropertyInfo(Variant::OBJECT, "instance"), PropertyInfo(Variant::STRING, "funcname"));
|
||||
mi.return_val.type = Variant::OBJECT;
|
||||
mi.return_val.name = "FuncRef";
|
||||
mi.return_val.class_name = "FuncRef";
|
||||
return mi;
|
||||
|
||||
} break;
|
||||
case TYPE_CONVERT: {
|
||||
|
||||
MethodInfo mi("convert", PropertyInfo(Variant::NIL, "what"), PropertyInfo(Variant::INT, "type"));
|
||||
mi.return_val.type = Variant::OBJECT;
|
||||
MethodInfo mi("convert", PropertyInfo(Variant::NIL, "what", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_NIL_IS_VARIANT), PropertyInfo(Variant::INT, "type"));
|
||||
mi.return_val.type = Variant::NIL;
|
||||
mi.return_val.usage |= PROPERTY_USAGE_NIL_IS_VARIANT;
|
||||
return mi;
|
||||
} break;
|
||||
case TYPE_OF: {
|
||||
|
||||
MethodInfo mi("typeof", PropertyInfo(Variant::NIL, "what"));
|
||||
MethodInfo mi("typeof", PropertyInfo(Variant::NIL, "what", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_NIL_IS_VARIANT));
|
||||
mi.return_val.type = Variant::INT;
|
||||
return mi;
|
||||
|
||||
|
@ -1760,7 +1761,7 @@ MethodInfo GDScriptFunctions::get_info(Function p_func) {
|
|||
|
||||
} break;
|
||||
case VAR_TO_STR: {
|
||||
MethodInfo mi("var2str", PropertyInfo(Variant::NIL, "var"));
|
||||
MethodInfo mi("var2str", PropertyInfo(Variant::NIL, "var", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_NIL_IS_VARIANT));
|
||||
mi.return_val.type = Variant::STRING;
|
||||
return mi;
|
||||
|
||||
|
@ -1773,7 +1774,7 @@ MethodInfo GDScriptFunctions::get_info(Function p_func) {
|
|||
return mi;
|
||||
} break;
|
||||
case VAR_TO_BYTES: {
|
||||
MethodInfo mi("var2bytes", PropertyInfo(Variant::NIL, "var"));
|
||||
MethodInfo mi("var2bytes", PropertyInfo(Variant::NIL, "var", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_NIL_IS_VARIANT));
|
||||
mi.return_val.type = Variant::POOL_BYTE_ARRAY;
|
||||
return mi;
|
||||
|
||||
|
@ -1796,7 +1797,7 @@ MethodInfo GDScriptFunctions::get_info(Function p_func) {
|
|||
|
||||
MethodInfo mi("load", PropertyInfo(Variant::STRING, "path"));
|
||||
mi.return_val.type = Variant::OBJECT;
|
||||
mi.return_val.name = "Resource";
|
||||
mi.return_val.class_name = "Resource";
|
||||
return mi;
|
||||
} break;
|
||||
case INST2DICT: {
|
||||
|
@ -1826,13 +1827,13 @@ MethodInfo GDScriptFunctions::get_info(Function p_func) {
|
|||
} break;
|
||||
case TO_JSON: {
|
||||
|
||||
MethodInfo mi("to_json", PropertyInfo(Variant::NIL, "var"));
|
||||
MethodInfo mi("to_json", PropertyInfo(Variant::NIL, "var", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_NIL_IS_VARIANT));
|
||||
mi.return_val.type = Variant::STRING;
|
||||
return mi;
|
||||
} break;
|
||||
case HASH: {
|
||||
|
||||
MethodInfo mi("hash", PropertyInfo(Variant::NIL, "var"));
|
||||
MethodInfo mi("hash", PropertyInfo(Variant::NIL, "var", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_NIL_IS_VARIANT));
|
||||
mi.return_val.type = Variant::INT;
|
||||
return mi;
|
||||
} break;
|
||||
|
@ -1868,7 +1869,7 @@ MethodInfo GDScriptFunctions::get_info(Function p_func) {
|
|||
return mi;
|
||||
} break;
|
||||
case LEN: {
|
||||
MethodInfo mi("len", PropertyInfo(Variant::NIL, "var"));
|
||||
MethodInfo mi("len", PropertyInfo(Variant::NIL, "var", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_NIL_IS_VARIANT));
|
||||
mi.return_val.type = Variant::INT;
|
||||
return mi;
|
||||
} break;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue