Browse Source

Make sure operators appear in the docs too

Add "operator" and "constructor" qualifiers to make it easier to
see in the docs.
reduz 4 years ago
parent
commit
11bf2ec6d1
3 changed files with 53 additions and 3 deletions
  1. 1 1
      core/variant/variant.h
  2. 2 2
      core/variant/variant_op.cpp
  3. 50 0
      editor/doc_data.cpp

+ 1 - 1
core/variant/variant.h

@@ -467,7 +467,7 @@ public:
 		return res;
 		return res;
 	}
 	}
 
 
-	Variant::Type get_operator_return_type(Operator p_operator, Type p_type_a, Type p_type_b);
+	static Variant::Type get_operator_return_type(Operator p_operator, Type p_type_a, Type p_type_b);
 	typedef void (*ValidatedOperatorEvaluator)(const Variant *left, const Variant *right, Variant *r_ret);
 	typedef void (*ValidatedOperatorEvaluator)(const Variant *left, const Variant *right, Variant *r_ret);
 	static ValidatedOperatorEvaluator get_validated_operator_evaluator(Operator p_operator, Type p_type_a, Type p_type_b);
 	static ValidatedOperatorEvaluator get_validated_operator_evaluator(Operator p_operator, Type p_type_a, Type p_type_b);
 #ifdef PTRCALL_ENABLED
 #ifdef PTRCALL_ENABLED

+ 2 - 2
core/variant/variant_op.cpp

@@ -2145,8 +2145,8 @@ static const char *_op_names[Variant::OP_MAX] = {
 	"-",
 	"-",
 	"*",
 	"*",
 	"/",
 	"/",
-	"- (negation)",
-	"+ (positive)",
+	"-",
+	"+",
 	"%",
 	"%",
 	"<<",
 	"<<",
 	">>",
 	">>",

+ 50 - 0
editor/doc_data.cpp

@@ -569,11 +569,61 @@ void DocData::generate(bool p_basic_types) {
 		method_list.sort();
 		method_list.sort();
 		Variant::get_constructor_list(Variant::Type(i), &method_list);
 		Variant::get_constructor_list(Variant::Type(i), &method_list);
 
 
+		for (int j = 0; j < Variant::OP_AND; j++) { //showing above 'and' is pretty confusing and there are a lot of variations
+
+			for (int k = 0; k < Variant::VARIANT_MAX; k++) {
+				Variant::Type rt = Variant::get_operator_return_type(Variant::Operator(j), Variant::Type(i), Variant::Type(k));
+				if (rt != Variant::NIL) {
+					//has operator
+					MethodInfo mi;
+					mi.name = "operator " + Variant::get_operator_name(Variant::Operator(j));
+					mi.return_val.type = rt;
+					if (k != Variant::NIL) {
+						PropertyInfo arg;
+						arg.name = "right";
+						arg.type = Variant::Type(k);
+						mi.arguments.push_back(arg);
+					}
+					method_list.push_back(mi);
+				}
+			}
+		}
+
+		if (Variant::is_keyed(Variant::Type(i))) {
+			MethodInfo mi;
+			mi.name = "operator []";
+			mi.return_val.type = Variant::NIL;
+			mi.return_val.usage = PROPERTY_USAGE_NIL_IS_VARIANT;
+
+			PropertyInfo arg;
+			arg.name = "key";
+			arg.type = Variant::NIL;
+			arg.usage = PROPERTY_USAGE_NIL_IS_VARIANT;
+			mi.arguments.push_back(arg);
+
+			method_list.push_back(mi);
+		} else if (Variant::has_indexing(Variant::Type(i))) {
+			MethodInfo mi;
+			mi.name = "operator []";
+			mi.return_val.type = Variant::get_indexed_element_type(Variant::Type(i));
+			PropertyInfo arg;
+			arg.name = "index";
+			arg.type = Variant::INT;
+			mi.arguments.push_back(arg);
+
+			method_list.push_back(mi);
+		}
+
 		for (List<MethodInfo>::Element *E = method_list.front(); E; E = E->next()) {
 		for (List<MethodInfo>::Element *E = method_list.front(); E; E = E->next()) {
 			MethodInfo &mi = E->get();
 			MethodInfo &mi = E->get();
 			MethodDoc method;
 			MethodDoc method;
 
 
 			method.name = mi.name;
 			method.name = mi.name;
+			if (method.name == cname) {
+				method.qualifiers = "constructor";
+			} else if (method.name.begins_with("operator")) {
+				method.qualifiers = "operator";
+			}
 
 
 			for (int j = 0; j < mi.arguments.size(); j++) {
 			for (int j = 0; j < mi.arguments.size(); j++) {
 				PropertyInfo arginfo = mi.arguments[j];
 				PropertyInfo arginfo = mi.arguments[j];