Exemplo n.º 1
0
        private static void AddVariableContent(StringBuilder variablesSb, string format, LocalVariable localVariable,
                                               MidRepresentationVariables vars, MethodInterpreter interpreter)
        {
            var localVariableData = interpreter.AnalyzeProperties.GetVariableData(localVariable);

            if (localVariableData == EscapingMode.Stack)
            {
                return;
            }
            if (localVariable.ComputedType().ClrType.IsSubclassOf(typeof(MethodInfo)))
            {
                variablesSb
                .AppendFormat("void (*{0})({1});",
                              localVariable.Name,
                              ComputeCommaSeparatedParameterTypes(localVariable))
                .AppendLine();
                return;
            }
            if (localVariableData == EscapingMode.Pointer)
            {
                var cppName = localVariable.ComputedType()
                              .ClrType.ToDeclaredVariableType(true, localVariableData);
                variablesSb
                .AppendFormat(format, cppName, localVariable.Id)
                .AppendLine();
                return;
            }
            variablesSb
            .AppendFormat(format, localVariable.ComputedType()
                          .ClrType.ToDeclaredVariableType(true, localVariableData), localVariable.Id)
            .AppendLine();
        }
Exemplo n.º 2
0
        static void AddVariableContent(StringBuilder variablesSb, string format, LocalVariable localVariable,
                                       MethodInterpreter interpreter, ClosureEntities closureEntities)
        {
            var localVariableData = interpreter.AnalyzeProperties.GetVariableData(localVariable);

            if (localVariableData == EscapingMode.Stack)
            {
                return;
            }
            if (localVariable.ComputedType().GetClrType(closureEntities).IsSubclassOf(typeof(MethodInfo)))
            {
                variablesSb
                .AppendFormat("System_Void (*{0})({1}*);",
                              //TODO: Added * to deal with pointers, is this the right approach ?
                              localVariable.Name,
                              ComputeCommaSeparatedParameterTypes(localVariable))
                .AppendLine();
                return;
            }
            if (localVariableData == EscapingMode.Pointer)
            {
                var cppName = localVariable.ComputedType()
                              .GetClrType(closureEntities).ToDeclaredVariableType(localVariableData);
                variablesSb
                .AppendFormat(format, cppName, localVariable.Id)
                .AppendLine();
                return;
            }
            variablesSb
            .AppendFormat(format, localVariable.ComputedType()
                          .GetClrType(closureEntities).ToDeclaredVariableType(localVariableData), localVariable.Id)
            .AppendLine();
        }