コード例 #1
0
 public static void AnnotateObject(IDiscreteBinding binding, string key, string value)
 {
     if (binding == null)
     {
         throw new ArgumentNullException("binding");
     }
     binding.Annotate(key, value);
 }
コード例 #2
0
 public NativeCompiledInitializer(InitializerType type, IDiscreteBinding binding, Func <object, ExecutionContext, object> functionDelegate)
     : base(type, binding)
 {
     if (functionDelegate == null)
     {
         throw new ArgumentNullException("functionDelegate");
     }
     this.Delegate = functionDelegate;
 }
コード例 #3
0
        protected override Expression GetExpression(ExecutionContext executionContext)
        {
            IDiscreteBinding binding = this.GetBindingStrategy.GetBinding(executionContext);

            if (binding == null)
            {
                throw new CodeGenerationException(String.Format("Could not find global binding {0}. This may indicate a bug in our code.", this.Moniker));
            }
            return(Expression.Constant(binding, binding.GetType()));
        }
コード例 #4
0
 protected RuntimeCompiledInitializer(InitializerType type, IDiscreteBinding binding, InitializerNode parseTree, IDebugInfoService debugInfoService)
     : base(type, binding)
 {
     if (parseTree == null)
     {
         throw new ArgumentNullException();
     }
     this.ParseTree        = parseTree;
     this.DebugInfoService = debugInfoService;
 }
コード例 #5
0
        protected CompiledInitializer(InitializerType type, IDiscreteBinding binding)
        {
            if (type == InitializerType.ProgramInitializer)
            {
                if (binding != null)
                {
                    throw new ArgumentException("ProgramInitializers must have null binding.");
                }
            }
            else if (type == InitializerType.ClassInitializer)
            {
                if (binding == null)
                {
                    throw new ArgumentNullException("binding");
                }
                if (!(binding is ClassBinding))
                {
                    throw new ArgumentException("ClassInitializers must have binding of type ClassBinding.");
                }
            }
            else if (type == InitializerType.GlobalInitializer)
            {
                if (binding == null)
                {
                    throw new ArgumentNullException("binding");
                }
                if (!(binding is GlobalVariableOrConstantBinding))
                {
                    throw new ArgumentException("ClassInitializers must have binding of type GlobalVariableOrConstantBinding.");
                }
            }
            else if (type == InitializerType.PoolVariableInitializer)
            {
                if (binding == null)
                {
                    throw new ArgumentNullException("binding");
                }
                if (!(binding is PoolVariableOrConstantBinding))
                {
                    throw new ArgumentException("ClassInitializers must have binding of type PoolVariableOrConstantBinding.");
                }
            }
            else
            {
                throw new ArgumentOutOfRangeException("type");
            }

            this.Type    = type;
            this.Binding = binding;
        }
コード例 #6
0
        private static CompiledInitializer AddInitializer(SmalltalkNameScope scope, InitializerType type, IDiscreteBinding binding, Type delegateType, string delegateName)
        {
            MethodInfo method = TypeUtilities.Method(delegateType, delegateName, BindingFlags.Public | BindingFlags.Static, NativeLoadHelper.InitializerDelegateTypes);
            Func <object, ExecutionContext, object> functionDelegate = (Func <object, ExecutionContext, object>)method.CreateDelegate(typeof(Func <object, ExecutionContext, object>));

            NativeCompiledInitializer initializer = new NativeCompiledInitializer(type, binding, functionDelegate);

            scope.Initializers.Add(initializer);
            return(initializer);
        }