예제 #1
0
        private void createNewConstructors()
        {
            NameReference type_name = this.Name.CreateNameReference(null, this.InstanceOf, isLocal: true);

            if (!this.NestedFunctions.Any(it => it.IsNewConstructor()))
            {
                foreach (FunctionDefinition init_cons in this.NestedFunctions.Where(it => it.IsInitConstructor()).StoreReadOnly())
                {
                    //if (this.NestedFunctions.Any(it => it.IsNewConstructor()
                    //      && it.Name.Arity == init_cons.Name.Arity && it.NOT_USED_CounterpartParameters(init_cons)))
                    //continue;

                    const string local_this = "__this__";

                    var new_cons = FunctionDefinition.CreateHeapConstructor(init_cons.Modifier, init_cons.Parameters,
                                                                            type_name,
                                                                            Block.CreateStatement(new IExpression[] {
                        VariableDeclaration.CreateStatement(local_this, null, Alloc.Create(type_name, useHeap: true)),
                        FunctionCall.Create(NameReference.Create(NameReference.Create(local_this), NameFactory.InitConstructorName),
                                            init_cons.Parameters.Select(it => FunctionArgument.Create(it.Name.CreateNameReference())).ToArray()),
                        Return.Create(NameReference.Create(local_this))
                    }));

                    this.AddNode(new_cons);
                }
            }
        }
예제 #2
0
 public IMemory CreateAlloc(int size)
 {
     return(Alloc.Create(size));
 }