Ejemplo n.º 1
0
        public static Expression CreateCallableFromMacroBody(BooCodeBuilder builder, MacroStatement macro)
        {
            // create closure for macro's body or null
            Expression macroBody = new NullLiteralExpression();
            if (macro.Block.Statements.Count > 0)
            {
                var callableExpr = new BlockExpression {Body = macro.Block};
                callableExpr.Parameters.Add(
                    new ParameterDeclaration("OutputStream",
                                             builder.CreateTypeReference(typeof(TextWriter))));

                macroBody = callableExpr;
            }
            return macroBody;
        }
Ejemplo n.º 2
0
        public void Process(ClassDefinition cd)
        {
            cd.Accept(this);
            var parameters = GenericParameters.ToArray();

            for (var i = 0; i < parameters.Length; ++i)
            {
                var param = parameters[i];
                var gen   = cd.GenericParameters.FirstOrDefault(gp => gp.Name.Equals(param.Name));
                var found = gen != null;
                if (!found)
                {
                    gen = _codeBuilder.CreateGenericParameterDeclaration(i, param.Name);
                }
                foreach (IType baseType in param.GetTypeConstraints())
                {
                    gen.BaseTypes.Add(_codeBuilder.CreateTypeReference(baseType));
                }
                if (param.MustHaveDefaultConstructor)
                {
                    gen.Constraints |= GenericParameterConstraints.Constructable;
                }
                if (param.IsValueType)
                {
                    gen.Constraints |= GenericParameterConstraints.ValueType;
                }
                else if (param.IsClass)
                {
                    gen.Constraints |= GenericParameterConstraints.ReferenceType;
                }
                if (param.Variance == Variance.Covariant)
                {
                    gen.Constraints |= GenericParameterConstraints.Covariant;
                }
                else if (param.Variance == Variance.Contravariant)
                {
                    gen.Constraints |= GenericParameterConstraints.Contravariant;
                }
                if (!found)
                {
                    cd.GenericParameters.Add(gen);
                }
            }
        }
Ejemplo n.º 3
0
 public void AddBaseType(IType type)
 {
     _cd.BaseTypes.Add(_codeBuilder.CreateTypeReference(type));
 }