Exemple #1
0
        public void InvokingWrappedMethod()
        {
            var wrapper  = new WrappedCodeObject("hello_void", typeof(TestPythonClass).GetMethod("hello_void"), this);
            var instance = PyTypeObject.DefaultNew <TestPythonObject>(TestPythonClass.Instance);
            var method   = instance.__getattribute__("hello_void") as IPyCallable;

            method.Call(null, null, new object[0]);
        }
Exemple #2
0
        public PyModuleClass(CodeObject __init__) :
            base("module", __init__, new PyClass[0])
        {
            __instance = this;

            Expression <Action <PyTypeObject> > expr = instance => DefaultNew <PyModule>(null);
            var methodInfo = ((MethodCallExpression)expr.Body).Method;

            __new__ = new WrappedCodeObject("__new__", methodInfo, this);
        }
Exemple #3
0
        public PyTextIOWrapperClass(CodeObject __init__) :
            base("TextIOWrapper", __init__, new[] { PyTextIOBaseClass.Instance })
        {
            __instance = this;

            Expression <Action <PyTypeObject> > expr = instance => DefaultNew <PyTextIOWrapper>(null);
            var methodInfo = ((MethodCallExpression)expr.Body).Method;

            __new__ = new WrappedCodeObject("__new__", methodInfo, this);
        }
Exemple #4
0
        /// <summary>
        /// Intended to be called once by the Cloaca interpreter to create the clr module in an injectable
        /// module loader.
        /// </summary>
        /// <returns></returns>
        public static PyModule CreateClrModule()
        {
            var internals = new ClrModuleInternals();
            var module    = PyModule.Create("clr");

            var addReference = new WrappedCodeObject("AddReference", internals.GetType().GetMethod("EmbeddedAddReference"), internals);

            module.__dict__.Add("AddReference", addReference);
            module.__dict__.Add("References", internals.references);
            return(module);
        }
Exemple #5
0
        public PyDictItemsIteratorClass(CodeObject __init__) :
            base("dict_itemiterator", __init__, new PyClass[0])
        {
            __instance = this;

            // TODO: Can this be better consolidated?
            Expression <Action <PyTypeObject> > expr = instance => DefaultNew <PyDictItemsIterator>(null);
            var methodInfo = ((MethodCallExpression)expr.Body).Method;

            __new__ = new WrappedCodeObject("__new__", methodInfo, this);
        }
Exemple #6
0
        public PyIntegerClass(CodeObject __init__) :
            base("int", __init__, new PyClass[0])
        {
            __instance = this;

            // We have to replace PyTypeObject.DefaultNew with one that creates a PyInteger.
            // TODO: Can this be better consolidated?
            Expression <Action <PyTypeObject> > expr = instance => DefaultNew <PyInteger>(null);
            var methodInfo = ((MethodCallExpression)expr.Body).Method;

            __new__ = new WrappedCodeObject("__new__", methodInfo, this);
        }
        public void EmbeddedVoid()
        {
            calledCount = 0;
            Expression <Action <EmbeddingTests> > expr = instance => Meow();
            var methodInfo = ((MethodCallExpression)expr.Body).Method;

            var meowCode = new WrappedCodeObject("meow", methodInfo, this);

            var interpreter = runProgram("meow()\n", new Dictionary <string, object>()
            {
                { "meow", meowCode }
            }, 1);

            Assert.That(calledCount, Is.EqualTo(1));
        }
Exemple #8
0
        public PyModule CreateModule()
        {
            var sysHandle       = PyModule.Create("sys");
            var schedulerHandle = PyModule.Create("scheduler");

            var me           = this.GetType();
            var getActive    = new WrappedCodeObject("get_active", me.GetMethod("getTasksActive"), this);
            var getBlocked   = new WrappedCodeObject("get_blocked", me.GetMethod("getTasksBlocked"), this);
            var getUnblocked = new WrappedCodeObject("get_unblocked", me.GetMethod("getTasksUnblocked"), this);
            var getYielded   = new WrappedCodeObject("get_yielded", me.GetMethod("getTasksYielded"), this);
            var schedule     = new WrappedCodeObject("schedule", me.GetMethod("schedule"), this);

            schedulerHandle.__dict__.Add(getActive.Name, getActive);
            schedulerHandle.__dict__.Add(getBlocked.Name, getBlocked);
            schedulerHandle.__dict__.Add(getUnblocked.Name, getUnblocked);
            schedulerHandle.__dict__.Add(getYielded.Name, getYielded);
            schedulerHandle.__dict__.Add(schedule.Name, schedule);

            sysHandle.__dict__.Add("scheduler", schedulerHandle);

            return(sysHandle);
        }