Pop() 공개 메소드

public Pop ( ) : object
리턴 object
예제 #1
0
        public override int Run(InterpretedFrame frame) {
            Debug.Assert(_offset != Unknown);

            if (!(bool)frame.Pop()) {
                return _offset;
            }

            return +1;
        }
예제 #2
0
        public override int Run(InterpretedFrame frame) {
            var targetDelegate = _targetField.GetValue(_site);

            object[] args = new object[_argCount];
            
            for (int i = _argCount - 1; i >= 1; i--) {
                args[i] = frame.Pop();
            }
            args[0] = _site;

            object ret = _target.InvokeInstance(targetDelegate, args);
            if (!_isVoid) frame.Push(ret);
            return +1;
        }
예제 #3
0
        public object Run(InterpretedFrame frame) {
            if (_onlyFaultHandlers) {
                bool fault = true;
                try {
                    RunInstructions(frame);
                    fault = false;
                    return frame.Pop();
                } finally {
                    if (fault) {
                        frame.FaultingInstruction = frame.InstructionIndex;
                        HandleFault(frame);
                    }
                }
            } else {
                while (true) {
                    try {
                        RunInstructions(frame);
                        return frame.Pop();
                    } catch (Exception exc) {
                        frame.FaultingInstruction = frame.InstructionIndex;
                        ExceptionHandler handler = HandleCatch(frame, exc);

                        if (handler == null) {
                            throw;
                        }

                        // stay in the current catch so that ThreadAbortException is not rethrown by CLR:
                        var abort = exc as ThreadAbortException;
                        if (abort != null) {
                            _anyAbortException = abort;
                            frame.CurrentAbortHandler = handler;
                            return Run(frame);
                        } 
                    }
                }
            }
        }
예제 #4
0
 public override int Run(InterpretedFrame frame)
 {
     Char right = (Char)frame.Pop();
     frame.Push(((Char)frame.Pop()) < right);
     return +1;
 }
예제 #5
0
 public override int Run(InterpretedFrame frame)
 {
     UInt64 right = (UInt64)frame.Pop();
     frame.Push(((UInt64)frame.Pop()) < right);
     return +1;
 }
예제 #6
0
 public override int Run(InterpretedFrame frame) {
     // it�s okay to pop the args in this order due to commutativity of referential equality
     frame.Push(PythonOps.IsNot(frame.Pop(), frame.Pop()));
     return +1;
 }
예제 #7
0
 public override int Run(InterpretedFrame frame) {
     frame.Push(((Byte)frame.Pop()) != ((Byte)frame.Pop()));
     return +1;
 }
예제 #8
0
 public override int Run(InterpretedFrame frame) {
     var ex = (Exception)frame.Pop();
     if (_rethrow) {
         ExceptionHandler handler;
         return frame.Interpreter.GotoHandler(frame, ex, out handler);
     }
     throw ex;
 }
 public override int Run(InterpretedFrame frame)
 {
     frame.Push(Convert(frame.Pop()));
     return(+1);
 }
예제 #10
0
 public override int Run(InterpretedFrame frame)
 {
     frame.Pop();
     return(+1);
 }
예제 #11
0
        public override int Run(InterpretedFrame frame) {
            // Are we jumping out of catch/finally while aborting the current thread?
            Interpreter.AbortThreadIfRequested(frame, _labelIndex);

            // goto the target label or the current finally continuation:
            return frame.Goto(_labelIndex, _hasValue ? frame.Pop() : Interpreter.NoValue);
        }
예제 #12
0
        public sealed override int Run(InterpretedFrame frame) {
            object[] args = new object[_argumentCount];
            for (int i = _argumentCount - 1; i >= 0; i--) {
                args[i] = frame.Pop();
            }

            object ret = Invoke(args);
            if (_target.ReturnType != typeof(void)) {
                frame.Push(ret);
            }
            return +1;
        }
예제 #13
0
 public override int Run(InterpretedFrame frame)
 {
     frame.Push(((UInt64)frame.Pop()) != ((UInt64)frame.Pop()));
     return(+1);
 }
예제 #14
0
 public override int Run(InterpretedFrame frame)
 {
     frame.Push(_field.GetValue(frame.Pop()));
     return(+1);
 }
        public override int Run(InterpretedFrame frame)
        {
            int target;

            return(_cases.TryGetValue((int)frame.Pop(), out target) ? target : 1);
        }
예제 #16
0
파일: Instruction.cs 프로젝트: xia7410/dlr
 public override int Run(InterpretedFrame frame)
 {
     frame.Push((bool)frame.Pop() ? ScriptingRuntimeHelpers.False : ScriptingRuntimeHelpers.True);
     return(+1);
 }
예제 #17
0
 public override int Run(InterpretedFrame frame) {
     frame.Push(((UInt64)frame.Pop()) == ((UInt64)frame.Pop()));
     return +1;
 }
예제 #18
0
 public override int Run(InterpretedFrame frame) {
     var arg0 = frame.Pop();
     var target = frame.Pop();
     frame.Push(_site.Target(_site, (CodeContext)frame.Pop(), target, arg0));
     return +1;
 }
예제 #19
0
 public override int Run(InterpretedFrame frame)
 {
     // unfortunately Type.IsInstanceOfType() is 35-times slower than "is T" so we use generic code:
     frame.Push(ScriptingRuntimeHelpers.BooleanToObject(frame.Pop() is T));
     return(+1);
 }
예제 #20
0
 public override int Run(InterpretedFrame frame) {
     var arg5 = frame.Pop();
     var arg4 = frame.Pop();
     var arg3 = frame.Pop();
     var arg2 = frame.Pop();
     var arg1 = frame.Pop();
     var arg0 = frame.Pop();
     var target = frame.Pop();
     frame.Push(_site.Target(_site, (CodeContext)frame.Pop(), target, arg0, arg1, arg2, arg3, arg4, arg5));
     return +1;
 }
예제 #21
0
        public override int Run(InterpretedFrame frame) {
            // TODO: ThreadAbortException ?

            object exception = frame.Pop();
            ExceptionHandler handler;
            return frame.Interpreter.GotoHandler(frame, exception, out handler);
        }
 public override int Run(InterpretedFrame frame) {
     if (_isLocal) {
         frame.Push(PythonOps.GetLocal((CodeContext)frame.Pop(), _name));
     } else {
         frame.Push(PythonOps.GetGlobal((CodeContext)frame.Pop(), _name));
     }
     return +1;
 }
예제 #23
0
 public override int Run(InterpretedFrame frame) {
     int target;
     return _cases.TryGetValue((int)frame.Pop(), out target) ? target : 1;
 }
 public override int Run(InterpretedFrame frame)
 {
     frame.Push(TotemOps.GetVariable((CodeContext)frame.Pop(), _name, !_isLocal, _lightThrow));
     return +1;
 }
예제 #25
0
            public override int Run(InterpretedFrame frame) {
                object[] defaults;
                if (_defaultCount > 0) {
                    defaults = new object[_defaultCount];
                    for (int i = 0; i < _defaultCount; i++) {
                        defaults[i] = frame.Pop();
                    }
                } else {
                    defaults = ArrayUtils.EmptyObjects;
                }

                object modName;
                if (_name != null) {
                    modName = _name.RawValue;
                } else {
                    modName = frame.Pop();
                }

                CodeContext context = /*_context ?? */(CodeContext)frame.Pop();
                
                frame.Push(PythonOps.MakeFunction(context, _def.FunctionCode, modName, defaults));

                return +1;
            }
예제 #26
0
 public override int Run(InterpretedFrame frame) {
     frame.Push(_field.GetValue(frame.Pop()));
     return +1;
 }
예제 #27
0
 public override int Run(InterpretedFrame frame) {
     frame.Push((bool)frame.Pop() ? ScriptingRuntimeHelpers.False : ScriptingRuntimeHelpers.True);
     return +1;
 }
예제 #28
0
 public override int Run(InterpretedFrame frame) {
     object value = frame.Pop();
     _field.SetValue(null, value);
     return +1;
 }
예제 #29
0
 public override int Run(InterpretedFrame frame) {
     frame.Pop();
     return +1;
 }
예제 #30
0
 public override int Run(InterpretedFrame frame) {
     throw (Exception)frame.Pop();
 }
예제 #31
0
 public override int Run(InterpretedFrame frame)
 {
     Int32 right = (Int32)frame.Pop();
     frame.Push(((Int32)frame.Pop()) < right);
     return +1;
 }
 public override int Run(InterpretedFrame frame) {
     frame.Push(Convert(frame.Pop()));
     return +1;
 }
예제 #33
0
 public override int Run(InterpretedFrame frame)
 {
     Byte right = (Byte)frame.Pop();
     frame.Push(((Byte)frame.Pop()) < right);
     return +1;
 }
예제 #34
0
 public override int Run(InterpretedFrame frame)
 {
     frame.Push(((Byte)frame.Pop()) == ((Byte)frame.Pop()));
     return(+1);
 }
예제 #35
0
 public override int Run(InterpretedFrame frame) {
     var ret = new IStrongBox[_count];
     for (int i = ret.Length - 1; i >= 0; i--) {
         ret[i] = (IStrongBox)frame.Pop();
     }
     frame.Push(RuntimeVariables.Create(ret));
     return +1;
 }
            public override int Run(InterpretedFrame frame) {
                if (_site == null) {
                    _site = CallSite<Func<CallSite, object, CodeContext, object>>.Create(_binder);
                }

                var context = (CodeContext)frame.Pop();
                frame.Push(_site.Target(_site, frame.Pop(), context));
                return +1;
            }
 public override int Run(InterpretedFrame frame) {
     frame.Push(PythonOps.GetGlobalContext((CodeContext)frame.Pop()));
     return +1;
 }
 public override int Run(InterpretedFrame frame)
 {
     frame.Push(TotemOps.GetParentContextFromFunction((TotemFunction)frame.Pop()));
     return +1;
 }