Ejemplo n.º 1
0
            public override void Visit(ReadIdentifierExpression node)
            {
                PushLocation(node);
                var symbol = node.Symbol;
                var local  = _localVars.Get(symbol);

                if (symbol.SymbolType == JSSymbol.SymbolTypes.Global && local.LocalType == Types.PropertyDescriptor.TypeOf)
                {
                    int profIndex = _currFuncMetadata.GetProfileIndex(node);
                    _ilGen.Ldloc(local);
                    _ilGen.Ldloc(_profiler);
                    _ilGen.Ldc_I4(profIndex);
                    _ilGen.LoadRuntimeInstance();
                    _ilGen.Ldfld(Types.Runtime.GlobalContext);
                    _ilGen.Call(Types.DObject.GetMap);
                    _ilGen.Call(Types.Operations.Internals.UpdateMapProfile);

                    var value = _localVars.PushTemporary(Types.DValue.TypeOf);
                    //_ilGen.Ldloc(local);
                    _ilGen.LoadRuntimeInstance();
                    _ilGen.Ldfld(Types.Runtime.GlobalContext);
                    _ilGen.Ldloca(value);
                    _ilGen.Call(Types.PropertyDescriptor.Get_DObject_DValueRef);

                    _ilGen.Ldloca(value);
                    _result.ValueType = mdr.ValueTypes.DValueRef;
                    PopLocation();
                }
                else
                {
                    base.Visit(node);
                }
            }
            public override void Visit(ReadIdentifierExpression node)
            {
                var symbol = node.Symbol;
                var local  = _localVars.Get(symbol);

                if (symbol.SymbolType == JSSymbol.SymbolTypes.Global && local == null)
                {
                    var nodeProfile = _currProfiler.GetNodeProfile(node);
                    if (_currFuncMetadata.EnableInlineCache &&
                        nodeProfile != null &&
                        nodeProfile.Map != null &&
                        nodeProfile.PD != null &&
                        nodeProfile.PD.IsDataDescriptor &&
                        !nodeProfile.PD.IsInherited)
                    {
                        PushLocation(node);
                        var value = _localVars.PushTemporary(Types.DValue.TypeOf);
                        _ilGen.Ldloc(_globalContext);
                        _ilGen.Ldc_I4(symbol.FieldId);
                        _ilGen.Ldloca(value);

                        _ilGen.Ldc_I4(nodeProfile.Map.UniqueId);
                        _ilGen.Ldc_I4(nodeProfile.PD.Index);
                        _ilGen.Call(Types.Operations.Internals.GetFieldUsingIC);
                        _ilGen.Ldloca(value);
                        _result.ValueType = mdr.ValueTypes.DValueRef;
                        PopLocation();
                    }
                    else
                    {
                        base.Visit(node);
                    }
                }
                else
                {
                    base.Visit(node);
                }
            }
Ejemplo n.º 3
0
 public override void Visit(ReadIdentifierExpression node)
 {
     base.Visit(node);
     Debug.Assert(node.Symbol.Readers.Contains(node), "Reader {0} is not in the reader list of symbol {0}", node.Symbol);
     Debug.Assert(node.Writer == null || node.Writer.IsUsedBy(node), "Reader {0} mismatch with writer {1}", node, node.Writer);
 }
Ejemplo n.º 4
0
 public override void Visit(ReadIdentifierExpression node)
 {
     Visit((Identifier)node);
 }
Ejemplo n.º 5
0
 public override void Visit(ReadIdentifierExpression node)
 {
     unfinishedClone = new ReadIdentifierExpression(GetRenamedSymbolOf(node.Symbol));
     Visit((Identifier)node);
 }
Ejemplo n.º 6
0
 public override void Visit(ReadIdentifierExpression node)
 {
     Trace.Fail("Cannot directly clone ReadIdentifier");
 }
Ejemplo n.º 7
0
 public override void Visit(ReadIdentifierExpression node)
 {
     UpdateType(node, TypeCalculator.GetType(node));
 }
Ejemplo n.º 8
0
 public override void Visit(ReadIdentifierExpression node)
 {
     AssignToImplicitReturn(node);
 }
Ejemplo n.º 9
0
 public override void Visit(ReadIdentifierExpression node)
 {
     throw new NotImplementedException();
 }