Esempio n. 1
0
        /// <inheritdoc />
        public override void VisitIndirectVarUse(IndirectVarUse x)
        {
            // Access to field of a name stored in variable-like construct: $object->$field
            FindFunctionCall(x);

            base.VisitIndirectVarUse(x);
        }
Esempio n. 2
0
        public override void VisitIndirectVarUse(IndirectVarUse x)
        {
            var thisObj = GetMemberOf(x);
            var name    = CreateRValue(x.VarNameEx);

            Result(new IndirectVariablePoint(x, name, thisObj));
        }
Esempio n. 3
0
        /// <remarks>
        /// The method checks indirect variable use for dynamic dereference.
        /// </remarks>
        /// <inheritdoc />
        public override void VisitIndirectVarUse(IndirectVarUse x)
        {
            // variable is dynamicaly dereferenced, if it has a variable use in it's name.
            if (x.VarNameEx is VariableUse)
            {
                occurrenceNodes.Enqueue(x);
            }

            base.VisitIndirectVarUse(x);
        }
Esempio n. 4
0
        /// <summary>
        /// Visits the indirect variable use.
        /// </summary>
        /// <param name="x">The executable.</param>
        public override void VisitIndirectVarUse(IndirectVarUse x)
        {
            base.VisitIndirectVarUse(x);

            //TODO: find a way to get only distinct uses.
            if (indirectlyUsed.FirstOrDefault(a => a.VarNameEx.Value != x.VarNameEx.Value) == null)
            {
                indirectlyUsed.Add(x);
            }
        }
Esempio n. 5
0
 public override void VisitIndirectVarUse(IndirectVarUse x)
 {
     VisitIsMemberOf(x.IsMemberOf);
     VisitElement(x.VarNameEx);    // TODO: { ... } ?
 }
Esempio n. 6
0
 virtual public void VisitIndirectVarUse(IndirectVarUse x)
 {
     VisitVarLikeConstructUse(x);
     VisitElement(x.VarNameEx);
 }
Esempio n. 7
0
 override public void VisitIndirectVarUse(IndirectVarUse x)
 {
     _serializer.StartSerialize(typeof(IndirectVarUse).Name, SerializeSpan(x.Span));
     base.VisitIndirectVarUse(x);
     _serializer.EndSerialize();
 }
Esempio n. 8
0
        /// <inheritdoc />
        public override void VisitIndirectVarUse(IndirectVarUse x)
        {
            base.VisitIndirectVarUse(x);

            vars.Add(x);
        }
Esempio n. 9
0
        private static VarLikeConstructUse /*!*/ CreateVariableUse(Position pos, VarLikeConstructUse /*!*/ variable, VarLikeConstructUse /*!*/ property,
                                                                   FcnParam parameters, VarLikeConstructUse chain)
        {
            if (parameters != null)
            {
                if (property is ItemUse)
                {
                    property.IsMemberOf = variable;
                    property            = new IndirectFcnCall(pos, property, (List <ActualParam>)parameters.Item2, (List <TypeRef>)parameters.Item1);
                }
                else
                {
                    DirectVarUse direct_use;
                    if ((direct_use = property as DirectVarUse) != null)
                    {
                        QualifiedName method_name = new QualifiedName(new Name(direct_use.VarName.Value), Name.EmptyNames);
                        property = new DirectFcnCall(pos, method_name, null, property.Position, (List <ActualParam>)parameters.Item2, (List <TypeRef>)parameters.Item1);
                    }
                    else
                    {
                        IndirectVarUse indirect_use = (IndirectVarUse)property;
                        property = new IndirectFcnCall(pos, indirect_use.VarNameEx, (List <ActualParam>)parameters.Item2, (List <TypeRef>)parameters.Item1);
                    }

                    property.IsMemberOf = variable;
                }

                // wrap into ItemUse
                property = CreateFcnArrayDereference(pos, property, parameters.Item3);
            }
            else
            {
                property.IsMemberOf = variable;
            }

            if (chain != null)
            {
                // finds the first variable use in the chain and connects it to the property

                VarLikeConstructUse first_in_chain = chain;
                for (;;)
                {
                    first_in_chain = DereferenceFunctionArrayAccess(first_in_chain);

                    if (first_in_chain.IsMemberOf != null)
                    {
                        first_in_chain = first_in_chain.IsMemberOf;
                    }
                    else
                    {
                        break;
                    }
                }

                first_in_chain.IsMemberOf = property;
                return(chain);
            }
            else
            {
                return(property);
            }
        }
Esempio n. 10
0
 public override void VisitIndirectVarUse(IndirectVarUse x)
 {
     // Force traversing
     VisitElement(x.IsMemberOf);
     VisitElement(x.VarNameEx);
 }
Esempio n. 11
0
 public static void EmitSwitch_LoadLocal(this IndirectVarUse node, CodeGenerator codeGenerator)
 {
     node.NodeCompiler <IVariableSwitchEmitter>().LoadLocal(node, codeGenerator);
 }
Esempio n. 12
0
 /// <inheritdoc />
 public override void VisitIndirectVarUse(IndirectVarUse x)
 {
     // Access to field of a name stored in variable-like construct: $object->$field
     FindUndefinedMembersUse(x);
     base.VisitIndirectVarUse(x);
 }
Esempio n. 13
0
 /// <inheritdoc />
 override public void VisitIndirectVarUse(IndirectVarUse x)
 {
     VisitElement(x.VarNameEx);
     result = new IndirectVarUse(x.Position, 1, (Expression)result);
 }
Esempio n. 14
0
 internal IndirectVariablePoint(IndirectVarUse variable, ValuePoint variableName, ValuePoint thisObj)
 {
     Variable     = variable;
     VariableName = variableName;
     ThisObj      = thisObj;
 }