mirror of
https://github.com/godotengine/godot.git
synced 2025-10-20 00:13:30 +00:00
Bug Fixes
-=-=-=-=- -Fixed problem with scaling shapes (#827), related to not taking scale in consideration for calculating the moment of inertia -Added support for multiline strings (or comments) using """ -Save subscene bug, properties not being saved in root node (#806) -Fix Crash in CollisionPolygon2DEditor (#814) -Restored Ability to compile without 3D (#795) -Fix InterpolatedCamera (#803) -Fix UV Import for OBJ Meshes (#771) -Fixed issue with modifier gizmos (#794) -Fixed CapsuleShape gizmo handle (#50) -Fixed Import Button (not properly working in 3D) (#733) -Many misc fixes (though no new features)
This commit is contained in:
parent
738eb2c1a8
commit
d85b67be53
56 changed files with 7513 additions and 1908 deletions
|
@ -65,18 +65,18 @@ bool GDCompiler::_create_unary_operator(CodeGen& codegen,const GDParser::Operato
|
|||
return true;
|
||||
}
|
||||
|
||||
bool GDCompiler::_create_binary_operator(CodeGen& codegen,const GDParser::OperatorNode *on,Variant::Operator op, int p_stack_level) {
|
||||
bool GDCompiler::_create_binary_operator(CodeGen& codegen,const GDParser::OperatorNode *on,Variant::Operator op, int p_stack_level,bool p_initializer) {
|
||||
|
||||
ERR_FAIL_COND_V(on->arguments.size()!=2,false);
|
||||
|
||||
|
||||
int src_address_a = _parse_expression(codegen,on->arguments[0],p_stack_level);
|
||||
int src_address_a = _parse_expression(codegen,on->arguments[0],p_stack_level,false,p_initializer);
|
||||
if (src_address_a<0)
|
||||
return false;
|
||||
if (src_address_a&GDFunction::ADDR_TYPE_STACK<<GDFunction::ADDR_BITS)
|
||||
p_stack_level++; //uses stack for return, increase stack
|
||||
|
||||
int src_address_b = _parse_expression(codegen,on->arguments[1],p_stack_level);
|
||||
int src_address_b = _parse_expression(codegen,on->arguments[1],p_stack_level,false,p_initializer);
|
||||
if (src_address_b<0)
|
||||
return false;
|
||||
|
||||
|
@ -111,6 +111,7 @@ int GDCompiler::_parse_assign_right_expression(CodeGen& codegen,const GDParser::
|
|||
|
||||
Variant::Operator var_op=Variant::OP_MAX;
|
||||
|
||||
|
||||
switch(p_expression->op) {
|
||||
|
||||
case GDParser::OperatorNode::OP_ASSIGN_ADD: var_op=Variant::OP_ADD; break;
|
||||
|
@ -123,6 +124,7 @@ int GDCompiler::_parse_assign_right_expression(CodeGen& codegen,const GDParser::
|
|||
case GDParser::OperatorNode::OP_ASSIGN_BIT_AND: var_op=Variant::OP_BIT_AND; break;
|
||||
case GDParser::OperatorNode::OP_ASSIGN_BIT_OR: var_op=Variant::OP_BIT_OR; break;
|
||||
case GDParser::OperatorNode::OP_ASSIGN_BIT_XOR: var_op=Variant::OP_BIT_XOR; break;
|
||||
case GDParser::OperatorNode::OP_INIT_ASSIGN:
|
||||
case GDParser::OperatorNode::OP_ASSIGN: {
|
||||
|
||||
//none
|
||||
|
@ -133,12 +135,14 @@ int GDCompiler::_parse_assign_right_expression(CodeGen& codegen,const GDParser::
|
|||
}
|
||||
}
|
||||
|
||||
bool initializer = p_expression->op==GDParser::OperatorNode::OP_INIT_ASSIGN;
|
||||
|
||||
if (var_op==Variant::OP_MAX) {
|
||||
|
||||
return _parse_expression(codegen,p_expression->arguments[1],p_stack_level);
|
||||
return _parse_expression(codegen,p_expression->arguments[1],p_stack_level,false,initializer);
|
||||
}
|
||||
|
||||
if (!_create_binary_operator(codegen,p_expression,var_op,p_stack_level))
|
||||
if (!_create_binary_operator(codegen,p_expression,var_op,p_stack_level,initializer))
|
||||
return -1;
|
||||
|
||||
int dst_addr=(p_stack_level)|(GDFunction::ADDR_TYPE_STACK<<GDFunction::ADDR_BITS);
|
||||
|
@ -148,7 +152,7 @@ int GDCompiler::_parse_assign_right_expression(CodeGen& codegen,const GDParser::
|
|||
|
||||
}
|
||||
|
||||
int GDCompiler::_parse_expression(CodeGen& codegen,const GDParser::Node *p_expression, int p_stack_level,bool p_root) {
|
||||
int GDCompiler::_parse_expression(CodeGen& codegen,const GDParser::Node *p_expression, int p_stack_level,bool p_root,bool p_initializer) {
|
||||
|
||||
|
||||
switch(p_expression->type) {
|
||||
|
@ -165,17 +169,16 @@ int GDCompiler::_parse_expression(CodeGen& codegen,const GDParser::Node *p_expre
|
|||
StringName identifier = in->name;
|
||||
|
||||
// TRY STACK!
|
||||
if (codegen.stack_identifiers.has(identifier)) {
|
||||
if (!p_initializer && codegen.stack_identifiers.has(identifier)) {
|
||||
|
||||
int pos = codegen.stack_identifiers[identifier];
|
||||
return pos|(GDFunction::ADDR_TYPE_STACK_VARIABLE<<GDFunction::ADDR_BITS);
|
||||
|
||||
}
|
||||
//TRY ARGUMENTS!
|
||||
//TRY MEMBERS!
|
||||
if (!codegen.function_node || !codegen.function_node->_static) {
|
||||
|
||||
// TRY MEMBER VARIABLES!
|
||||
|
||||
//static function
|
||||
if (codegen.script->member_indices.has(identifier)) {
|
||||
|
||||
|
@ -686,6 +689,7 @@ int GDCompiler::_parse_expression(CodeGen& codegen,const GDParser::Node *p_expre
|
|||
case GDParser::OperatorNode::OP_ASSIGN_BIT_AND:
|
||||
case GDParser::OperatorNode::OP_ASSIGN_BIT_OR:
|
||||
case GDParser::OperatorNode::OP_ASSIGN_BIT_XOR:
|
||||
case GDParser::OperatorNode::OP_INIT_ASSIGN:
|
||||
case GDParser::OperatorNode::OP_ASSIGN: {
|
||||
|
||||
ERR_FAIL_COND_V(on->arguments.size()!=2,-1);
|
||||
|
@ -843,7 +847,7 @@ int GDCompiler::_parse_expression(CodeGen& codegen,const GDParser::Node *p_expre
|
|||
|
||||
int slevel = p_stack_level;
|
||||
|
||||
int dst_address_a = _parse_expression(codegen,on->arguments[0],slevel);
|
||||
int dst_address_a = _parse_expression(codegen,on->arguments[0],slevel,false,on->op==GDParser::OperatorNode::OP_INIT_ASSIGN);
|
||||
if (dst_address_a<0)
|
||||
return -1;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue