Beispiel #1
0
        static void BuildArgumentValues(
            ILocalValueScope localValues,
            INamedExpressionTuple expressions,
            ILocalIdentifierScope argumentScope,
            ArgumentInstanceCollection arguments,
            IContext argumentContext,
            IContext functionContext)
        {
            var argN = 0;

            foreach (var expression in expressions.Tuple)
            {
                var argumentName = expression.Name;
                if (string.IsNullOrEmpty(argumentName))
                {
                    argumentName = arguments[argN].Name;
                    argN++;
                }
                var argument = (IArgumentInstance)argumentScope[argumentName];
                var value    = Dynamic((dynamic)expression.Expression, argumentContext);
                var casted   = ImplicitCast(value, argument.Type);
                localValues.Add(argument, casted);
            }
            for (; argN < arguments.Count; argN++)
            {
                var argument = arguments[argN];
                var value    = Dynamic((dynamic)argument.Argument.Value, functionContext);
                localValues.Add(argument, value);
            }
        }
Beispiel #2
0
 static void RebuildToNetTypes(ILocalValueScope localValues, object netValues, FieldToDecl fields)
 {
     if (netValues == null)
     {
         return;
     }
     foreach (var field in fields)
     {
         var fieldValue = localValues[field.Value];
         var converter  = fieldValue.Type.GetToNetType();
         var netValue   = converter(fieldValue.Data);
         field.Key.SetValue(netValues, netValue);
     }
 }
Beispiel #3
0
 static void NetTypesToRebuild(object netValues, FieldToDecl fields, ILocalValueScope localValues)
 {
     if (netValues == null)
     {
         return;
     }
     foreach (var field in fields)
     {
         if (field.Key.GetCustomAttributes(typeof(ArgumentAssignable)).Any())
         {
             var netValue   = field.Key.GetValue(netValues);
             var fieldValue = localValues[field.Value];
             var converter  = fieldValue.Type.GetFromNetType();
             converter(netValue, fieldValue.Data);
         }
     }
 }
Beispiel #4
0
        static void ExtractArgumentReferenceValues(
            ILocalValueScope localValues,
            INamedExpressionTuple expressions,
            ArgumentInstanceCollection arguments,
            IContext callerContext)
        {
            var argN = 0;

            foreach (var expression in expressions.Tuple)
            {
                var argument = arguments[argN];

                argN++;
                if (argument.Argument.IsAssignable && expression.Expression is ITypedReference reference)
                {
                    var referenceDecl = callerContext.Values[reference.Instance];
                    var value         = localValues[argument];
                    var casted        = ImplicitCast(value, referenceDecl.Type);
                    Array.Copy(casted.Data, referenceDecl.Data, referenceDecl.Data.Length);
                }
            }
        }
Beispiel #5
0
        static IExpression ExtractResultValues(ILocalValueScope localValues, IExpression result, ArgumentInstanceCollection results)
        {
            if (results.IsEmpty())
            {
                return(null);
            }
            if (results.Count == 1 && results.First().Name == null)
            {
                return(result);
            }
            var expressionTuple = new NamedExpressionTuple();

            foreach (var namedResult in results)
            {
                var value = localValues[namedResult];
                expressionTuple.Tuple.Add(
                    new NamedExpression {
                    Name       = namedResult.Name,
                    Expression = value
                });
            }
            return(expressionTuple);
        }
Beispiel #6
0
 internal Context(ILocalIdentifierScope idScope, ILocalValueScope valueScope)
 {
     _identifiers = new ParentedIdentifierScope(idScope);
     _values      = new ParentValueScope(valueScope);
 }
Beispiel #7
0
 internal ParentValueScope(ILocalValueScope local)
 {
     _local = local;
 }