Ejemplo n.º 1
0
        public override void Build(AstPropertyDefinition propertyOrField, TypeDefinition typeDefinition, DefinitionBuildingContext context)
        {
            var type            = context.ConvertReference(propertyOrField.Type);
            var fieldDefinition = new FieldDefinition(propertyOrField.Name, FieldAttributes.Private, type);

            typeDefinition.Fields.Add(fieldDefinition);
            context.MapDefinition(propertyOrField, fieldDefinition);
        }
Ejemplo n.º 2
0
        private void DefineType(ModuleDefinition module, Ast.Definitions.AstTypeDefinition typeAst, DefinitionBuildingContext context)
        {
            var type = new TypeDefinition("", typeAst.Name, TypeAttributes.Public | ToTypeAttribute(typeAst.DefinitionType))
            {
                BaseType = module.Import(typeof(object))
            };

            module.Types.Add(type);

            foreach (var memberAst in typeAst.Members)
            {
                DefineMember(type, memberAst, context);
            }
            context.MapDefinition(typeAst, type);
        }
Ejemplo n.º 3
0
        public override void Build(AstFunctionDefinition ast, TypeDefinition type, DefinitionBuildingContext context)
        {
            var attributes = MethodAttributes.Public;

            if (ast.Compilation.Static)
            {
                attributes |= MethodAttributes.Static;
            }

            var method = new MethodDefinition(ast.Name, attributes, type.Module.Import(typeof(void)));

            var astGenericParameterTypes = ast.Parameters.Select(p => p.Type).OfType <AstGenericPlaceholderType>();

            foreach (var astPlaceholder in astGenericParameterTypes)
            {
                var genericParameter = new GenericParameter(astPlaceholder.Name, method);
                method.GenericParameters.Add(genericParameter);
                context.MapDefinition(astPlaceholder, genericParameter);
            }

            var returnType = context.ConvertReference(ast.ReturnType, returnNullIfFailed: true);

            if (returnType != null)
            {
                method.ReturnType = returnType;
            }
            else
            {
                context.AddDebt(() => method.ReturnType = context.ConvertReference(ast.ReturnType));
            }

            if (ast.Compilation.EntryPoint)
            {
                type.Module.EntryPoint = method;
            }

            this.helper.FinalizeBuild(method, ast, type, context);
        }
Ejemplo n.º 4
0
 public virtual void FinalizeBuild(MethodDefinition method, AstMethodDefinitionBase ast, TypeDefinition type, DefinitionBuildingContext context)
 {
     BuildParameters(method, ast, context);
     type.Methods.Add(method);
     context.MapDefinition(ast, method);
 }
Ejemplo n.º 5
0
 public virtual void FinalizeBuild(MethodDefinition method, AstMethodDefinitionBase ast, TypeDefinition type, DefinitionBuildingContext context)
 {
     BuildParameters(method, ast, context);
     type.Methods.Add(method);
     context.MapDefinition(ast, method);
 }