Exemple #1
0
        private void UpdateStackAndInstrStream(OpCode?instr, TransitionWrapper transitions, bool firstParamIsThis = false)
        {
            if (Invalidated)
            {
                throw new InvalidOperationException("Cannot modify Emit after a delegate has been generated from it");
            }

            if (MustMark)
            {
                throw new SigilVerificationException("Unreachable code detected", IL.Instructions(AllLocals));
            }

            var wrapped = new InstructionAndTransitions(instr, instr.HasValue ? (int?)IL.Index : null, transitions.Transitions);

            TypesProducedAtIndex[IL.Index] = transitions.Transitions.SelectMany(t => t.PushedToStack).ToList();

            var verifyRes = CurrentVerifiers.Transition(wrapped);

            if (!verifyRes.Success)
            {
                throw new SigilVerificationException(transitions.MethodName, verifyRes, IL.Instructions(AllLocals));
            }

            if (IsVerifying)
            {
                MaxStackSize = Math.Max(verifyRes.StackSize, MaxStackSize);
            }
        }
        public StateFactory()
        {
            isTransitionDone = true;            //Don't show transition screen if it's our first load.
            isSceneLoaded    = false;

            GameObject transitionScreen =
                GameObject.Instantiate(Resources.Load <GameObject>(TRANSITION_SCREEN_ID)) as GameObject;

            m_transitionScreen = new TransitionWrapper(transitionScreen);
        }
Exemple #3
0
        private void UpdateState(OpCode instr, FieldInfo field, TransitionWrapper transitions)
        {
            UpdateStackAndInstrStream(instr, transitions);

            IL.Emit(instr, field);
        }
Exemple #4
0
        private void UpdateState(OpCode instr, MethodInfo method, IEnumerable <Type> parameterTypes, TransitionWrapper transitions, bool firstParamIsThis = false, Type[] arglist = null)
        {
            UpdateStackAndInstrStream(instr, transitions, firstParamIsThis);

            if (arglist == null)
            {
                IL.Emit(instr, method, parameterTypes);
            }
            else
            {
                IL.EmitCall(instr, method, parameterTypes, arglist);
            }
        }
Exemple #5
0
        private void UpdateState(OpCode instr, ConstructorInfo cons, TransitionWrapper transitions)
        {
            UpdateStackAndInstrStream(instr, transitions);

            IL.Emit(instr, cons);
        }
Exemple #6
0
        private void UpdateState(OpCode instr, ConstructorInfo cons, IEnumerable <Type> parameterTypes, TransitionWrapper transitions)
        {
            UpdateStackAndInstrStream(instr, transitions, firstParamIsThis: true);

            IL.Emit(instr, cons, parameterTypes);
        }
Exemple #7
0
        private void UpdateState(OpCode instr, Label[] param, TransitionWrapper transitions, out UpdateOpCodeDelegate update)
        {
            UpdateStackAndInstrStream(instr, transitions);

            IL.Emit(instr, param, out update);
        }
Exemple #8
0
 private TransitionWrapper Wrap(IEnumerable <StackTransition> trans, string name)
 {
     return(TransitionWrapper.Get(name, trans));
 }
Exemple #9
0
 private void ConvertToSByte(TransitionWrapper transitions)
 {
     UpdateState(OpCodes.Conv_I1, transitions);
 }
Exemple #10
0
 private void ConvertToByteOverflow(TransitionWrapper transitions)
 {
     UpdateState(OpCodes.Conv_Ovf_U1, transitions);
 }
Exemple #11
0
 private void ConvertToUInt32Overflow(TransitionWrapper transitions)
 {
     UpdateState(OpCodes.Conv_Ovf_U4, transitions);
 }
Exemple #12
0
 private void ConvertToFloat(TransitionWrapper transitions)
 {
     UpdateState(OpCodes.Conv_R4, transitions);
 }
Exemple #13
0
 private void ConvertToDouble(TransitionWrapper transitions)
 {
     UpdateState(OpCodes.Conv_R8, transitions);
 }
Exemple #14
0
 private void ConvertToInt64Overflow(TransitionWrapper transitions)
 {
     UpdateState(OpCodes.Conv_Ovf_I8, transitions);
 }
Exemple #15
0
 private void ConvertToInt32(TransitionWrapper transitions)
 {
     UpdateState(OpCodes.Conv_I4, transitions);
 }
Exemple #16
0
 private void UnsignedConvertToSByteOverflow(TransitionWrapper transitions)
 {
     UpdateState(OpCodes.Conv_Ovf_I1_Un, transitions);
 }
Exemple #17
0
        private void UpdateState(OpCode instr, string str, TransitionWrapper transitions)
        {
            UpdateStackAndInstrStream(instr, transitions);

            IL.Emit(instr, str);
        }
Exemple #18
0
 private void UpdateState(TransitionWrapper transitions)
 {
     UpdateStackAndInstrStream(null, transitions);
 }
Exemple #19
0
        private void UpdateState(OpCode instr, CallingConventions callConventions, Type returnType, Type[] parameterTypes, TransitionWrapper transitions, Type[] arglist)
        {
            UpdateStackAndInstrStream(instr, transitions);

            if (arglist == null)
            {
                IL.Emit(instr, callConventions, returnType, parameterTypes);
            }
            else
            {
                IL.EmitCalli(callConventions, returnType, parameterTypes, arglist);
            }
        }
Exemple #20
0
 private void ConvertToNativeInt(TransitionWrapper transitions)
 {
     UpdateState(OpCodes.Conv_I, transitions);
 }
Exemple #21
0
 private void ConvertToUInt64(TransitionWrapper transitions)
 {
     UpdateState(OpCodes.Conv_U8, transitions);
 }
Exemple #22
0
 private void ConvertToUnsignedNativeIntOverflow(TransitionWrapper transitions)
 {
     UpdateState(OpCodes.Conv_Ovf_U, transitions);
 }
Exemple #23
0
        private void UpdateState(OpCode instr, long param, TransitionWrapper transitions)
        {
            UpdateStackAndInstrStream(instr, transitions);

            IL.Emit(instr, param);
        }
Exemple #24
0
 private void UnsignedConvertToUInt64Overflow(TransitionWrapper transitions)
 {
     UpdateState(OpCodes.Conv_Ovf_U8_Un, transitions);
 }