Exemple #1
0
        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);
        }
Exemple #2
0
 public virtual XzaarExpression Visit(MemberAccessChainNode access)
 {
     return(null);
 }
Exemple #3
0
 public virtual MemberAccessChainNode Visit(MemberAccessChainNode node)
 {
     return(node);
 }