private MemberAccessChainNode Process(MemberAccessChainNode node) { if (node.ResultType == null || node.Type == null) { Process(node.Accessor); if (node.Accessor.Type == "any") { var v = Variable(node.LastAccessor.StringValue); if (v != null) { // NOTE: This could potentially be a class in the future and not just a struct. if (IsStruct(v.Type)) { var f = structs[v.Type].Fields.Cast <FieldNode>().FirstOrDefault(a => a.Name == node.Accessor.StringValue); if (f != null) { node.Accessor.Type = f.Type; } node.LastAccessor.Type = v.Type; } } else { var p = Parameter(node.LastAccessor.StringValue); if (p != null) { // declaring type // NOTE: This could potentially be a class in the future and not just a struct. if (IsStruct(p.Type)) { var f = structs[p.Type].Fields.Cast <FieldNode>().FirstOrDefault(a => a.Name == node.Accessor.StringValue); if (f != null) { node.Accessor.Type = f.Type; } node.LastAccessor.Type = p.Type; } } } } if (node.Accessor is MemberAccessNode) { (node.Accessor as MemberAccessNode).MemberType = node.Accessor.Type; } if (node.LastAccessor is MemberAccessNode) { (node.LastAccessor as MemberAccessNode).MemberType = node.LastAccessor.Type; } node.Type = node.ResultType = node.Accessor.Type; } return(node); }
public virtual XzaarExpression Visit(MemberAccessChainNode access) { return(null); }
public virtual MemberAccessChainNode Visit(MemberAccessChainNode node) { return(node); }