diff --git a/UCodeLang/UCodeLang/Compilation/Front/SystematicAnalysis/Statements/AssignExpressionNode.cpp b/UCodeLang/UCodeLang/Compilation/Front/SystematicAnalysis/Statements/AssignExpressionNode.cpp index b4ae230f..c6b27a0d 100644 --- a/UCodeLang/UCodeLang/Compilation/Front/SystematicAnalysis/Statements/AssignExpressionNode.cpp +++ b/UCodeLang/UCodeLang/Compilation/Front/SystematicAnalysis/Statements/AssignExpressionNode.cpp @@ -33,7 +33,10 @@ void SystematicAnalysis::OnAssignExpressionNode(const AssignExpressionNode& node if (node._ReassignAddress == false) { - ExpressionType._IsAddress = false; + if (!AssignType.IsDynamicTrait()) + { + ExpressionType._IsAddress = false; + } } @@ -156,9 +159,13 @@ void SystematicAnalysis::OnAssignExpressionNode(const AssignExpressionNode& node } - if (!AssignExType._IsAddress ) + if (!AssignExType._IsAddress) { - //obj = _IR_LookingAtIRBlock->NewLoadPtr(obj.Pointer); + if (AssignExType.IsLocationValue() && !domove_ctor) + { + obj = _IR_LookingAtIRBlock->NewLoadPtr(obj.Pointer); + ExIR = _IR_LookingAtIRBlock->NewLoad_Dereferenc(ExIR,IR_ConvertToIRType(AssignExType));//This current line may be in the wrong place. I will update it when i find the edge case + } AssignExType._IsAddress = true; } diff --git a/UCodeLang/UCodeLang/Compilation/Front/SystematicAnalysis/Statements/DeclareVariablenode.cpp b/UCodeLang/UCodeLang/Compilation/Front/SystematicAnalysis/Statements/DeclareVariablenode.cpp index c3357fe5..04f23772 100644 --- a/UCodeLang/UCodeLang/Compilation/Front/SystematicAnalysis/Statements/DeclareVariablenode.cpp +++ b/UCodeLang/UCodeLang/Compilation/Front/SystematicAnalysis/Statements/DeclareVariablenode.cpp @@ -359,7 +359,7 @@ void SystematicAnalysis::OnDeclareVariablenode(const DeclareVariableNode& node, auto& VarType = syb->VarType; - auto& Ex = _LastExpressionType; + auto Ex = _LastExpressionType; auto Token = NeverNullptr(node._Type._name._ScopedName.back()._token); Type_DeclareVariableTypeCheck(VarType, Ex, Token);