From 938cc63cfadd7de9dc52c8ed6e607065e3a671b3 Mon Sep 17 00:00:00 2001 From: Hein-Pieter van Braam Date: Sun, 17 Sep 2017 02:32:05 +0200 Subject: [PATCH] Move Variant::evaluate() switch to computed goto In an effort to make GDScript a little faster replace the double switch() with a computed goto on compilers that set __GNUC__. For compilers that don't support computed goto it will fall back to regular switch/case statements. In addition disable using boolean values in a mathematical context. Now boolean values can only be compared with other booleans. Booleans will also no longer be coerced to integers. This PR replaces #11308 and fixes #11291 --- visual_script_expression.cpp | 4 ++-- visual_script_func_nodes.cpp | 2 +- visual_script_nodes.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/visual_script_expression.cpp b/visual_script_expression.cpp index eae866d..897e910 100644 --- a/visual_script_expression.cpp +++ b/visual_script_expression.cpp @@ -1023,7 +1023,7 @@ VisualScriptExpression::ENode *VisualScriptExpression::_parse_expression() { case TK_OP_OR: op = Variant::OP_OR; break; case TK_OP_NOT: op = Variant::OP_NOT; break; case TK_OP_ADD: op = Variant::OP_ADD; break; - case TK_OP_SUB: op = Variant::OP_SUBSTRACT; break; + case TK_OP_SUB: op = Variant::OP_SUBTRACT; break; case TK_OP_MUL: op = Variant::OP_MULTIPLY; break; case TK_OP_DIV: op = Variant::OP_DIVIDE; break; case TK_OP_MOD: op = Variant::OP_MODULE; break; @@ -1085,7 +1085,7 @@ VisualScriptExpression::ENode *VisualScriptExpression::_parse_expression() { case Variant::OP_MODULE: priority = 2; break; case Variant::OP_ADD: priority = 3; break; - case Variant::OP_SUBSTRACT: priority = 3; break; + case Variant::OP_SUBTRACT: priority = 3; break; case Variant::OP_SHIFT_LEFT: priority = 4; break; case Variant::OP_SHIFT_RIGHT: priority = 4; break; diff --git a/visual_script_func_nodes.cpp b/visual_script_func_nodes.cpp index 2679467..f02e797 100644 --- a/visual_script_func_nodes.cpp +++ b/visual_script_func_nodes.cpp @@ -1546,7 +1546,7 @@ public: value = Variant::evaluate(Variant::OP_ADD, value, p_argument); } break; case VisualScriptPropertySet::ASSIGN_OP_SUB: { - value = Variant::evaluate(Variant::OP_SUBSTRACT, value, p_argument); + value = Variant::evaluate(Variant::OP_SUBTRACT, value, p_argument); } break; case VisualScriptPropertySet::ASSIGN_OP_MUL: { value = Variant::evaluate(Variant::OP_MULTIPLY, value, p_argument); diff --git a/visual_script_nodes.cpp b/visual_script_nodes.cpp index b617c11..16aec76 100644 --- a/visual_script_nodes.cpp +++ b/visual_script_nodes.cpp @@ -3762,7 +3762,7 @@ void register_visual_script_nodes() { VisualScriptLanguage::singleton->add_register_func("operators/compare/greater_equal", create_op_node); //mathematic VisualScriptLanguage::singleton->add_register_func("operators/math/add", create_op_node); - VisualScriptLanguage::singleton->add_register_func("operators/math/subtract", create_op_node); + VisualScriptLanguage::singleton->add_register_func("operators/math/subtract", create_op_node); VisualScriptLanguage::singleton->add_register_func("operators/math/multiply", create_op_node); VisualScriptLanguage::singleton->add_register_func("operators/math/divide", create_op_node); VisualScriptLanguage::singleton->add_register_func("operators/math/negate", create_op_node);