public virtual void Visit(FieldAccessExpressionNode node) { node.expression.Accept(this); node.identifier.Accept(this); }
public override void Visit(FieldAccessExpressionNode node) { node.expression.Accept(this); ClassDefinition classDefinition = Analysis.Environment.Classes.Lookup(node.expression.ExpressionType.Name); FieldDefinition fieldDefinition = Analysis.Environment.LookupFieldInClass(node.identifier.name, classDefinition); Gen("mov", "eax", "[eax+" + fieldDefinition.Location.ToString() + "]", "Accessing field " + classDefinition.Name + "." + fieldDefinition.Name + "()"); }
public override void Visit(FieldAccessExpressionNode node) { node.expression.Accept(this); if (node.expression.ExpressionType.GetType() != typeof(ClassType)) throw new Exception("Object used for field access is not an instance of any Class"); ClassDefinition classDefinition = Analysis.Environment.Classes.Lookup(node.expression.ExpressionType.Name); FieldDefinition fieldDefinition; try { fieldDefinition = Analysis.Environment.LookupFieldInClass(node.identifier.name, classDefinition); } catch (Exception) { throw new Exception("Field '" + node.identifier.name + "' not found in class '" + node.expression.ExpressionType.Name + "'"); } node.ExpressionType = fieldDefinition.FieldType; }