public CallContext(CompilationEnvironment outerCompEnv, CompilationEnvironment inlinedCompEnv, IImSeq <Expression> arguments) { var paramMap = new Map <JST.Identifier, int>(); for (var i = 0; i < inlinedCompEnv.Method.Arity; i++) { paramMap.Add(inlinedCompEnv.ValueParameterIds[i], i); } Parameters = paramMap; var argumentEffects = new Seq <JST.Effects>(inlinedCompEnv.Method.Arity); SeenParameters = new Seq <bool?>(inlinedCompEnv.Method.Arity); AllArgumentEffects = JST.Effects.Bottom; var allReadOnly = true; foreach (var e in arguments) { var fxCtxt = new JST.EffectsContext(null); e.AccumEffects(fxCtxt, null, null); argumentEffects.Add(fxCtxt.AccumEffects); AllArgumentEffects = AllArgumentEffects.Lub(fxCtxt.AccumEffects); if (!fxCtxt.AccumEffects.IsReadOnly) { allReadOnly = false; } SeenParameters.Add(e.IsValue(outerCompEnv) ? default(bool?) : false); } ArgumentEffects = argumentEffects; AllReadOnly = allReadOnly; IsOk = true; }
public CallContext(IImSeq <Identifier> parameters, IImSeq <Expression> arguments, Func <Expression, bool> isValue) { var paramMap = new Map <Identifier, int>(); for (var i = 0; i < parameters.Count; i++) { paramMap.Add(parameters[i], i); } Parameters = paramMap; var argumentEffects = new Seq <Effects>(parameters.Count); SeenParameters = new Seq <bool>(parameters.Count); var allReadOnly = true; AllArgumentEffects = Effects.Bottom; foreach (var e in arguments) { var fxCtxt = new EffectsContext(isValue); e.AccumEffects(fxCtxt, null, null); argumentEffects.Add(fxCtxt.AccumEffects); AllArgumentEffects = AllArgumentEffects.Lub(fxCtxt.AccumEffects); if (!fxCtxt.AccumEffects.IsReadOnly) { allReadOnly = false; } SeenParameters.Add(false); } ArgumentEffects = argumentEffects; AllReadOnly = allReadOnly; IsOk = true; }
public CallContext(CompilationEnvironment outerCompEnv, CompilationEnvironment inlinedCompEnv, IImSeq<Expression> arguments) { var paramMap = new Map<JST.Identifier, int>(); for (var i = 0; i < inlinedCompEnv.Method.Arity; i++) paramMap.Add(inlinedCompEnv.ValueParameterIds[i], i); Parameters = paramMap; var argumentEffects = new Seq<JST.Effects>(inlinedCompEnv.Method.Arity); SeenParameters = new Seq<bool?>(inlinedCompEnv.Method.Arity); AllArgumentEffects = JST.Effects.Bottom; var allReadOnly = true; foreach (var e in arguments) { var fxCtxt = new JST.EffectsContext(null); e.AccumEffects(fxCtxt, null, null); argumentEffects.Add(fxCtxt.AccumEffects); AllArgumentEffects = AllArgumentEffects.Lub(fxCtxt.AccumEffects); if (!fxCtxt.AccumEffects.IsReadOnly) allReadOnly = false; SeenParameters.Add(e.IsValue(outerCompEnv) ? default(bool?) : false); } ArgumentEffects = argumentEffects; AllReadOnly = allReadOnly; IsOk = true; }
public CallContext(IImSeq<Identifier> parameters, IImSeq<Expression> arguments, Func<Expression, bool> isValue) { var paramMap = new Map<Identifier, int>(); for (var i = 0; i < parameters.Count; i++) paramMap.Add(parameters[i], i); Parameters = paramMap; var argumentEffects = new Seq<Effects>(parameters.Count); SeenParameters = new Seq<bool>(parameters.Count); var allReadOnly = true; AllArgumentEffects = Effects.Bottom; foreach (var e in arguments) { var fxCtxt = new EffectsContext(isValue); e.AccumEffects(fxCtxt, null, null); argumentEffects.Add(fxCtxt.AccumEffects); AllArgumentEffects = AllArgumentEffects.Lub(fxCtxt.AccumEffects); if (!fxCtxt.AccumEffects.IsReadOnly) allReadOnly = false; SeenParameters.Add(false); } ArgumentEffects = argumentEffects; AllReadOnly = allReadOnly; IsOk = true; }