C#: Assume 64-bit types when type has no meta

When the C# bindings generator finds a type without meta assume the type
refers to the 64-bit version of the type:
- `float` is converted to `double`
- `int` is converted to `long`
This commit is contained in:
Raul Santos 2022-09-01 00:40:59 +02:00
parent a5db03efa7
commit 9a10701c69
No known key found for this signature in database
GPG Key ID: B532473AE3A803E4
12 changed files with 42 additions and 53 deletions

View File

@ -7,7 +7,7 @@ namespace Godot.SourceGenerators.Sample
private NodePath _nodePath; private NodePath _nodePath;
private int _velocity; private int _velocity;
public override void _Process(float delta) public override void _Process(double delta)
{ {
_ = delta; _ = delta;

View File

@ -117,13 +117,13 @@ namespace GodotTools.Build
} }
} }
private void IssueActivated(int idx) private void IssueActivated(long idx)
{ {
if (idx < 0 || idx >= _issuesList.ItemCount) if (idx < 0 || idx >= _issuesList.ItemCount)
throw new ArgumentOutOfRangeException(nameof(idx), "Item list index out of range."); throw new ArgumentOutOfRangeException(nameof(idx), "Item list index out of range.");
// Get correct issue idx from issue list // Get correct issue idx from issue list
int issueIndex = (int)_issuesList.GetItemMetadata(idx); int issueIndex = (int)_issuesList.GetItemMetadata((int)idx);
if (issueIndex < 0 || issueIndex >= _issues.Count) if (issueIndex < 0 || issueIndex >= _issues.Count)
throw new InvalidOperationException("Issue index out of range."); throw new InvalidOperationException("Issue index out of range.");
@ -311,7 +311,7 @@ namespace GodotTools.Build
Copy Copy
} }
private void IssuesListContextOptionPressed(int id) private void IssuesListContextOptionPressed(long id)
{ {
switch ((IssuesContextMenuOption)id) switch ((IssuesContextMenuOption)id)
{ {
@ -336,9 +336,9 @@ namespace GodotTools.Build
} }
} }
private void IssuesListClicked(int index, Vector2 atPosition, int mouseButtonIndex) private void IssuesListClicked(long index, Vector2 atPosition, long mouseButtonIndex)
{ {
if (mouseButtonIndex != (int)MouseButton.Right) if (mouseButtonIndex != (long)MouseButton.Right)
{ {
return; return;
} }

View File

@ -93,7 +93,7 @@ namespace GodotTools.Build
private void ViewLogToggled(bool pressed) => BuildOutputView.LogVisible = pressed; private void ViewLogToggled(bool pressed) => BuildOutputView.LogVisible = pressed;
private void BuildMenuOptionPressed(int id) private void BuildMenuOptionPressed(long id)
{ {
switch ((BuildMenuOptions)id) switch ((BuildMenuOptions)id)
{ {
@ -175,7 +175,7 @@ namespace GodotTools.Build
AddChild(BuildOutputView); AddChild(BuildOutputView);
} }
public override void _Notification(int what) public override void _Notification(long what)
{ {
base._Notification(what); base._Notification(what);

View File

@ -67,7 +67,7 @@ namespace GodotTools.Export
} }
} }
public override void _ExportBegin(string[] features, bool isDebug, string path, int flags) public override void _ExportBegin(string[] features, bool isDebug, string path, long flags)
{ {
base._ExportBegin(features, isDebug, path, flags); base._ExportBegin(features, isDebug, path, flags);
@ -90,7 +90,7 @@ namespace GodotTools.Export
} }
} }
private void _ExportBeginImpl(string[] features, bool isDebug, string path, int flags) private void _ExportBeginImpl(string[] features, bool isDebug, string path, long flags)
{ {
_ = flags; // Unused _ = flags; // Unused

View File

@ -111,7 +111,7 @@ namespace GodotTools
_toolBarBuildButton.Show(); _toolBarBuildButton.Show();
} }
private void _MenuOptionPressed(int id) private void _MenuOptionPressed(long id)
{ {
switch ((MenuOptions)id) switch ((MenuOptions)id)
{ {

View File

@ -9,7 +9,7 @@ namespace GodotTools
{ {
private Timer _watchTimer; private Timer _watchTimer;
public override void _Notification(int what) public override void _Notification(long what)
{ {
if (what == Node.NotificationWmWindowFocusIn) if (what == Node.NotificationWmWindowFocusIn)
{ {

View File

@ -2585,6 +2585,16 @@ const String BindingsGenerator::_get_generic_type_parameters(const TypeInterface
return params; return params;
} }
StringName BindingsGenerator::_get_type_name_from_meta(Variant::Type p_type, GodotTypeInfo::Metadata p_meta) {
if (p_type == Variant::INT) {
return _get_int_type_name_from_meta(p_meta);
} else if (p_type == Variant::FLOAT) {
return _get_float_type_name_from_meta(p_meta);
} else {
return Variant::get_type_name(p_type);
}
}
StringName BindingsGenerator::_get_int_type_name_from_meta(GodotTypeInfo::Metadata p_meta) { StringName BindingsGenerator::_get_int_type_name_from_meta(GodotTypeInfo::Metadata p_meta) {
switch (p_meta) { switch (p_meta) {
case GodotTypeInfo::METADATA_INT_IS_INT8: case GodotTypeInfo::METADATA_INT_IS_INT8:
@ -2612,8 +2622,8 @@ StringName BindingsGenerator::_get_int_type_name_from_meta(GodotTypeInfo::Metada
return "ulong"; return "ulong";
break; break;
default: default:
// Assume INT32 // Assume INT64
return "int"; return "long";
} }
} }
@ -2626,12 +2636,8 @@ StringName BindingsGenerator::_get_float_type_name_from_meta(GodotTypeInfo::Meta
return "double"; return "double";
break; break;
default: default:
// Assume real_t (float or double depending of REAL_T_IS_DOUBLE) // Assume FLOAT64
#ifdef REAL_T_IS_DOUBLE
return "double"; return "double";
#else
return "float";
#endif
} }
} }
@ -2922,13 +2928,7 @@ bool BindingsGenerator::_populate_object_type_interfaces() {
} else if (return_info.type == Variant::NIL) { } else if (return_info.type == Variant::NIL) {
imethod.return_type.cname = name_cache.type_void; imethod.return_type.cname = name_cache.type_void;
} else { } else {
if (return_info.type == Variant::INT) { imethod.return_type.cname = _get_type_name_from_meta(return_info.type, m ? m->get_argument_meta(-1) : GodotTypeInfo::METADATA_NONE);
imethod.return_type.cname = _get_int_type_name_from_meta(m ? m->get_argument_meta(-1) : GodotTypeInfo::METADATA_NONE);
} else if (return_info.type == Variant::FLOAT) {
imethod.return_type.cname = _get_float_type_name_from_meta(m ? m->get_argument_meta(-1) : GodotTypeInfo::METADATA_NONE);
} else {
imethod.return_type.cname = Variant::get_type_name(return_info.type);
}
} }
for (int i = 0; i < argc; i++) { for (int i = 0; i < argc; i++) {
@ -2952,13 +2952,7 @@ bool BindingsGenerator::_populate_object_type_interfaces() {
} else if (arginfo.type == Variant::NIL) { } else if (arginfo.type == Variant::NIL) {
iarg.type.cname = name_cache.type_Variant; iarg.type.cname = name_cache.type_Variant;
} else { } else {
if (arginfo.type == Variant::INT) { iarg.type.cname = _get_type_name_from_meta(arginfo.type, m ? m->get_argument_meta(i) : GodotTypeInfo::METADATA_NONE);
iarg.type.cname = _get_int_type_name_from_meta(m ? m->get_argument_meta(i) : GodotTypeInfo::METADATA_NONE);
} else if (arginfo.type == Variant::FLOAT) {
iarg.type.cname = _get_float_type_name_from_meta(m ? m->get_argument_meta(i) : GodotTypeInfo::METADATA_NONE);
} else {
iarg.type.cname = Variant::get_type_name(arginfo.type);
}
} }
iarg.name = escape_csharp_keyword(snake_to_camel_case(iarg.name)); iarg.name = escape_csharp_keyword(snake_to_camel_case(iarg.name));
@ -3060,13 +3054,7 @@ bool BindingsGenerator::_populate_object_type_interfaces() {
} else if (arginfo.type == Variant::NIL) { } else if (arginfo.type == Variant::NIL) {
iarg.type.cname = name_cache.type_Variant; iarg.type.cname = name_cache.type_Variant;
} else { } else {
if (arginfo.type == Variant::INT) { iarg.type.cname = _get_type_name_from_meta(arginfo.type, GodotTypeInfo::METADATA_NONE);
iarg.type.cname = _get_int_type_name_from_meta(GodotTypeInfo::METADATA_NONE);
} else if (arginfo.type == Variant::FLOAT) {
iarg.type.cname = _get_float_type_name_from_meta(GodotTypeInfo::METADATA_NONE);
} else {
iarg.type.cname = Variant::get_type_name(arginfo.type);
}
} }
iarg.name = escape_csharp_keyword(snake_to_camel_case(iarg.name)); iarg.name = escape_csharp_keyword(snake_to_camel_case(iarg.name));

View File

@ -703,6 +703,7 @@ class BindingsGenerator {
const String _get_generic_type_parameters(const TypeInterface &p_itype, const List<TypeReference> &p_generic_type_parameters); const String _get_generic_type_parameters(const TypeInterface &p_itype, const List<TypeReference> &p_generic_type_parameters);
StringName _get_type_name_from_meta(Variant::Type p_type, GodotTypeInfo::Metadata p_meta);
StringName _get_int_type_name_from_meta(GodotTypeInfo::Metadata p_meta); StringName _get_int_type_name_from_meta(GodotTypeInfo::Metadata p_meta);
StringName _get_float_type_name_from_meta(GodotTypeInfo::Metadata p_meta); StringName _get_float_type_name_from_meta(GodotTypeInfo::Metadata p_meta);

View File

@ -11,13 +11,13 @@ public partial class _CLASS_ : _BASE_
// Get the gravity from the project settings to be synced with RigidBody nodes. // Get the gravity from the project settings to be synced with RigidBody nodes.
public float gravity = ProjectSettings.GetSetting("physics/2d/default_gravity").AsSingle(); public float gravity = ProjectSettings.GetSetting("physics/2d/default_gravity").AsSingle();
public override void _PhysicsProcess(float delta) public override void _PhysicsProcess(double delta)
{ {
Vector2 velocity = Velocity; Vector2 velocity = Velocity;
// Add the gravity. // Add the gravity.
if (!IsOnFloor()) if (!IsOnFloor())
velocity.y += gravity * delta; velocity.y += gravity * (float)delta;
// Handle Jump. // Handle Jump.
if (Input.IsActionJustPressed("ui_accept") && IsOnFloor()) if (Input.IsActionJustPressed("ui_accept") && IsOnFloor())

View File

@ -11,17 +11,17 @@ public partial class _CLASS_ : _BASE_
// Get the gravity from the project settings to be synced with RigidBody nodes. // Get the gravity from the project settings to be synced with RigidBody nodes.
public float gravity = ProjectSettings.GetSetting("physics/3d/default_gravity").AsSingle(); public float gravity = ProjectSettings.GetSetting("physics/3d/default_gravity").AsSingle();
public override void _PhysicsProcess(float delta) public override void _PhysicsProcess(double delta)
{ {
Vector3 velocity = Velocity; Vector3 velocity = Velocity;
// Add the gravity. // Add the gravity.
if (!IsOnFloor()) if (!IsOnFloor())
velocity.y -= gravity * delta; velocity.y -= gravity * (float)delta;
// Handle Jump. // Handle Jump.
if (Input.IsActionJustPressed("ui_accept") && IsOnFloor()) if (Input.IsActionJustPressed("ui_accept") && IsOnFloor())
velocity.y = JumpVelocity; velocity.y = JumpVelocity;
// Get the input direction and handle the movement/deceleration. // Get the input direction and handle the movement/deceleration.
// As good practice, you should replace UI actions with custom gameplay actions. // As good practice, you should replace UI actions with custom gameplay actions.

View File

@ -11,7 +11,7 @@ public partial class _CLASS_ : _BASE_
} }
// Called every frame. 'delta' is the elapsed time since the previous frame. // Called every frame. 'delta' is the elapsed time since the previous frame.
public override void _Process(float delta) public override void _Process(double delta)
{ {
} }
} }

View File

@ -20,37 +20,37 @@ public partial class VisualShaderNode_CLASS_ : _BASE_
return ""; return "";
} }
public override int _GetReturnIconType() public override long _GetReturnIconType()
{ {
return 0; return 0;
} }
public override int _GetInputPortCount() public override long _GetInputPortCount()
{ {
return 0; return 0;
} }
public override string _GetInputPortName(int port) public override string _GetInputPortName(long port)
{ {
return ""; return "";
} }
public override int _GetInputPortType(int port) public override long _GetInputPortType(long port)
{ {
return 0; return 0;
} }
public override int _GetOutputPortCount() public override long _GetOutputPortCount()
{ {
return 1; return 1;
} }
public override string _GetOutputPortName(int port) public override string _GetOutputPortName(long port)
{ {
return "result"; return "result";
} }
public override int _GetOutputPortType(int port) public override long _GetOutputPortType(long port)
{ {
return 0; return 0;
} }