mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	Store type hint of declared identifiers
This commit is contained in:
		
							parent
							
								
									b7a00aead0
								
							
						
					
					
						commit
						f7793fc5c9
					
				
					 2 changed files with 78 additions and 19 deletions
				
			
		|  | @ -100,7 +100,7 @@ public: | |||
| 		Type type; | ||||
| 
 | ||||
| 		virtual DataType get_datatype() const { return DataType(); } | ||||
| 		virtual void set_datatype(DataType p_datatype) {} | ||||
| 		virtual void set_datatype(const DataType &p_datatype) {} | ||||
| 
 | ||||
| 		virtual ~Node() {} | ||||
| 	}; | ||||
|  | @ -124,6 +124,7 @@ public: | |||
| 			Variant default_value; | ||||
| #endif | ||||
| 			StringName identifier; | ||||
| 			DataType data_type; | ||||
| 			StringName setter; | ||||
| 			StringName getter; | ||||
| 			int line; | ||||
|  | @ -133,6 +134,7 @@ public: | |||
| 		struct Constant { | ||||
| 			StringName identifier; | ||||
| 			Node *expression; | ||||
| 			DataType type; | ||||
| 		}; | ||||
| 
 | ||||
| 		struct Signal { | ||||
|  | @ -166,10 +168,15 @@ public: | |||
| 		bool _static; | ||||
| 		MultiplayerAPI::RPCMode rpc_mode; | ||||
| 		StringName name; | ||||
| 		DataType return_type; | ||||
| 		Vector<StringName> arguments; | ||||
| 		Vector<DataType> argument_types; | ||||
| 		Vector<Node *> default_values; | ||||
| 		BlockNode *body; | ||||
| 
 | ||||
| 		virtual DataType get_datatype() const { return return_type; } | ||||
| 		virtual void set_datatype(const DataType &p_datatype) { return_type = p_datatype; } | ||||
| 
 | ||||
| 		FunctionNode() { | ||||
| 			type = TYPE_FUNCTION; | ||||
| 			_static = false; | ||||
|  | @ -184,6 +191,7 @@ public: | |||
| 		Map<StringName, int> locals; | ||||
| 		List<Node *> statements; | ||||
| 		Vector<StringName> variables; | ||||
| 		Vector<DataType> variable_types; | ||||
| 		Vector<int> variable_lines; | ||||
| 
 | ||||
| 		Node *if_condition; //tiny hack to improve code completion on if () blocks
 | ||||
|  | @ -203,6 +211,9 @@ public: | |||
| 	struct TypeNode : public Node { | ||||
| 
 | ||||
| 		Variant::Type vtype; | ||||
| 		DataType datatype; | ||||
| 		virtual DataType get_datatype() const { return datatype; } | ||||
| 		virtual void set_datatype(const DataType &p_datatype) { datatype = p_datatype; } | ||||
| 		TypeNode() { type = TYPE_TYPE; } | ||||
| 	}; | ||||
| 	struct BuiltInFunctionNode : public Node { | ||||
|  | @ -213,6 +224,9 @@ public: | |||
| 	struct IdentifierNode : public Node { | ||||
| 
 | ||||
| 		StringName name; | ||||
| 		DataType datatype; | ||||
| 		virtual DataType get_datatype() const { return datatype; } | ||||
| 		virtual void set_datatype(const DataType &p_datatype) { datatype = p_datatype; } | ||||
| 		IdentifierNode() { type = TYPE_IDENTIFIER; } | ||||
| 	}; | ||||
| 
 | ||||
|  | @ -220,6 +234,9 @@ public: | |||
| 
 | ||||
| 		StringName name; | ||||
| 		Node *assign; | ||||
| 		DataType datatype; | ||||
| 		virtual DataType get_datatype() const { return datatype; } | ||||
| 		virtual void set_datatype(const DataType &p_datatype) { datatype = p_datatype; } | ||||
| 		LocalVarNode() { | ||||
| 			type = TYPE_LOCAL_VAR; | ||||
| 			assign = NULL; | ||||
|  | @ -228,13 +245,24 @@ public: | |||
| 
 | ||||
| 	struct ConstantNode : public Node { | ||||
| 		Variant value; | ||||
| 		DataType datatype; | ||||
| 		virtual DataType get_datatype() const { return datatype; } | ||||
| 		virtual void set_datatype(const DataType &p_datatype) { datatype = p_datatype; } | ||||
| 		ConstantNode() { type = TYPE_CONSTANT; } | ||||
| 	}; | ||||
| 
 | ||||
| 	struct ArrayNode : public Node { | ||||
| 
 | ||||
| 		Vector<Node *> elements; | ||||
| 		ArrayNode() { type = TYPE_ARRAY; } | ||||
| 		DataType datatype; | ||||
| 		virtual DataType get_datatype() const { return datatype; } | ||||
| 		virtual void set_datatype(const DataType &p_datatype) { datatype = p_datatype; } | ||||
| 		ArrayNode() { | ||||
| 			type = TYPE_ARRAY; | ||||
| 			datatype.has_type = true; | ||||
| 			datatype.kind = DataType::BUILTIN; | ||||
| 			datatype.builtin_type = Variant::ARRAY; | ||||
| 		} | ||||
| 	}; | ||||
| 
 | ||||
| 	struct DictionaryNode : public Node { | ||||
|  | @ -246,7 +274,15 @@ public: | |||
| 		}; | ||||
| 
 | ||||
| 		Vector<Pair> elements; | ||||
| 		DictionaryNode() { type = TYPE_DICTIONARY; } | ||||
| 		DataType datatype; | ||||
| 		virtual DataType get_datatype() const { return datatype; } | ||||
| 		virtual void set_datatype(const DataType &p_datatype) { datatype = p_datatype; } | ||||
| 		DictionaryNode() { | ||||
| 			type = TYPE_DICTIONARY; | ||||
| 			datatype.has_type = true; | ||||
| 			datatype.kind = DataType::BUILTIN; | ||||
| 			datatype.builtin_type = Variant::DICTIONARY; | ||||
| 		} | ||||
| 	}; | ||||
| 
 | ||||
| 	struct SelfNode : public Node { | ||||
|  | @ -312,6 +348,9 @@ public: | |||
| 		Operator op; | ||||
| 
 | ||||
| 		Vector<Node *> arguments; | ||||
| 		DataType datatype; | ||||
| 		virtual DataType get_datatype() const { return datatype; } | ||||
| 		virtual void set_datatype(const DataType &p_datatype) { datatype = p_datatype; } | ||||
| 		OperatorNode() { type = TYPE_OPERATOR; } | ||||
| 	}; | ||||
| 
 | ||||
|  | @ -381,6 +420,9 @@ public: | |||
| 
 | ||||
| 	struct CastNode : public Node { | ||||
| 		Node *source_node; | ||||
| 		DataType cast_type; | ||||
| 		virtual DataType get_datatype() const { return cast_type; } | ||||
| 		virtual void set_datatype(const DataType &p_datatype) { cast_type = p_datatype; } | ||||
| 		CastNode() { type = TYPE_CAST; } | ||||
| 	}; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 George Marques
						George Marques