Ejemplo n.º 1
0
        public void VisitNode(JSSwitchStatement ss)
        {
            AbsoluteJumpsSeenStack.Add(0);

            VisitChildren(ss);

            AbsoluteJumpsSeenStack.RemoveAt(AbsoluteJumpsSeenStack.Count - 1);
        }
Ejemplo n.º 2
0
        public void VisitNode(JSSwitchStatement ss)
        {
            var conditionType = ss.Condition.GetExpectedType(TypeSystem);

            if (
                !ILBlockTranslator.IsIntegral(conditionType) &&
                ILBlockTranslator.IsEnum(conditionType)
            ) {
                var cast = JSInvocationExpression.InvokeStatic(
                    new JSFakeMethod("Number", TypeSystem.Int32, conditionType), new[] { ss.Condition }, true
                );

                ss.ReplaceChild(ss.Condition, cast);
            }

            VisitChildren(ss);
        }
Ejemplo n.º 3
0
        public void VisitNode(JSSwitchStatement ss)
        {
            CheckLabel(ss);

            PushBlock(ss);

            try {
                VisitChildren(ss);
            } finally {
                BlockStack.Pop();
            }
        }
Ejemplo n.º 4
0
        public JSSwitchStatement TranslateNode(ILSwitch swtch)
        {
            var condition = TranslateNode(swtch.Condition);
            var conditionType = condition.GetExpectedType(TypeSystem);
            var result = new JSSwitchStatement(condition);

            Blocks.Push(result);

            result.Cases.AddRange(
                (from cb in swtch.CaseBlocks select TranslateNode(cb, conditionType))
            );

            Blocks.Pop();

            return result;
        }
Ejemplo n.º 5
0
        public void VisitNode(JSSwitchStatement ss)
        {
            var conditionType = ss.Condition.GetActualType(TypeSystem);

            if (
                !TypeUtil.IsIntegral(conditionType) &&
                IsEnumOrNullableEnum(conditionType)
            ) {
                var cast = JSInvocationExpression.InvokeMethod(
                    JS.valueOf(TypeSystem.Int32), ss.Condition, null, true
                );

                ss.ReplaceChild(ss.Condition, cast);
            }

            VisitChildren(ss);
        }