Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
 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;
 }
Ejemplo n.º 4
0
 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;
 }