public override void Visit(AssignmentStatementNode node) { Console.WriteLine(this.indentation + "= ---- Assignment Statement ----"); indentation = indentation + " "; node.identifier.Accept(this); node.expression.Accept(this); indentation = indentation.Substring(0, indentation.Length - 3); }
public override void Visit(AssignmentStatementNode node) { node.expression.Accept(this); if (MethodBeingVisited.LocalVariables.Contains(node.identifier.name)) { VariableDefinition LocalVariableDefinition = MethodBeingVisited.LocalVariables.Lookup(node.identifier.name); Gen("mov", "[ebp-" + LocalVariableDefinition.Location.ToString() + "]", "eax", "Assigning eax into variable " + LocalVariableDefinition.Name); } else if (MethodBeingVisited.Parameters.Contains(node.identifier.name)) { ParameterDefinition parameterDefinition = MethodBeingVisited.Parameters.Lookup(node.identifier.name); Gen("mov", "[ebp+" + parameterDefinition.Location.ToString() + "]", "eax", "Assigning eax into parameter " + parameterDefinition.Name); } else { FieldDefinition fieldDefinition = Analysis.Environment.LookupFieldInClass(node.identifier.name, ClassBeingVisited); Gen("mov", "[ecx+" + fieldDefinition.Location.ToString() + "]", "eax", "Assigning eax into field " + fieldDefinition.Name); } }
public virtual void Visit(AssignmentStatementNode node) { node.identifier.Accept(this); node.expression.Accept(this); }
public override void Visit(AssignmentStatementNode node) { try { node.expression.Accept(this); if (!AreTypeCompatible(LookupSymbolType(node.identifier.name).GetType(), node.expression.ExpressionType.GetType()) || (LookupSymbolType(node.identifier.name).GetType() == typeof(ClassType) && !IsClassCompatible((ClassType)LookupSymbolType(node.identifier.name), (ClassType)node.expression.ExpressionType))) throw new Exception("Type Mismatch in Assignment Statement!"); } catch (Exception e) { Analysis.LogSemanticError(e.Message, node.lineNumber); } }