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); } }
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); }
public override void Visit(ReadIdentifierExpression node) { Visit((Identifier)node); }
public override void Visit(ReadIdentifierExpression node) { unfinishedClone = new ReadIdentifierExpression(GetRenamedSymbolOf(node.Symbol)); Visit((Identifier)node); }
public override void Visit(ReadIdentifierExpression node) { Trace.Fail("Cannot directly clone ReadIdentifier"); }
public override void Visit(ReadIdentifierExpression node) { UpdateType(node, TypeCalculator.GetType(node)); }
public override void Visit(ReadIdentifierExpression node) { AssignToImplicitReturn(node); }
public override void Visit(ReadIdentifierExpression node) { throw new NotImplementedException(); }