Home | History | Annotate | Download | only in src

Lines Matching refs:factory

56 // Factory functions for the Arboretum
58 static void newPool (pANTLR3_ARBORETUM factory);
59 static pANTLR3_BASE_TREE newPoolTree (pANTLR3_ARBORETUM factory);
60 static pANTLR3_BASE_TREE newFromTree (pANTLR3_ARBORETUM factory, pANTLR3_COMMON_TREE tree);
61 static pANTLR3_BASE_TREE newFromToken (pANTLR3_ARBORETUM factory, pANTLR3_COMMON_TOKEN token);
62 static void factoryClose (pANTLR3_ARBORETUM factory);
67 pANTLR3_ARBORETUM factory;
71 factory = (pANTLR3_ARBORETUM) ANTLR3_MALLOC((size_t)sizeof(ANTLR3_ARBORETUM));
72 if (factory == NULL)
77 // Install a vector factory to create, track and free() any child
80 factory->vFactory = antlr3VectorFactoryNew(0);
81 if (factory->vFactory == NULL)
83 free(factory);
93 factory->nilStack = antlr3StackNew(0);
95 // Install factory API
97 factory->newTree = newPoolTree;
98 factory->newFromTree = newFromTree;
99 factory->newFromToken = newFromToken;
100 factory->close = factoryClose;
104 factory->thisPool = -1;
105 factory->pools = NULL;
106 newPool(factory);
108 // Factory space is good, we now want to initialize our cheating token
111 antlr3SetCTAPI(&factory->unTruc);
113 // Set some initial variables for future copying, including a string factory
116 factory->unTruc.factory = factory;
117 factory->unTruc.baseTree.strFactory = strFactory;
119 return factory;
124 newPool(pANTLR3_ARBORETUM factory)
126 // Increment factory count
128 factory->thisPool++;
132 factory->pools = (pANTLR3_COMMON_TREE *)
133 ANTLR3_REALLOC( (void *)factory->pools, // Current pools pointer (starts at NULL)
134 (ANTLR3_UINT32)((factory->thisPool + 1) * sizeof(pANTLR3_COMMON_TREE *)) // Memory for new pool pointers
137 // Allocate a new pool for the factory
139 factory->pools[factory->thisPool] =
146 factory->nextTree = 0;
154 newPoolTree (pANTLR3_ARBORETUM factory)
160 tree = factory->nilStack->peek(factory->nilStack);
169 factory->nilStack->pop(factory->nilStack);
175 if (factory->nextTree >= ANTLR3_FACTORY_POOL_SIZE)
179 newPool(factory);
185 tree = factory->pools[factory->thisPool] + factory->nextTree;
186 factory->nextTree++;
192 // Set some initial variables for future copying, including a string factory
195 tree->factory = factory;
196 tree->baseTree.strFactory = factory->unTruc.baseTree.strFactory;
213 newFromTree(pANTLR3_ARBORETUM factory, pANTLR3_COMMON_TREE tree)
217 newTree = factory->newTree(factory);
233 newFromToken(pANTLR3_ARBORETUM factory, pANTLR3_COMMON_TOKEN token)
237 newTree = factory->newTree(factory);
252 factoryClose (pANTLR3_ARBORETUM factory)
256 // First close the vector factory that supplied all the child pointer
259 factory->vFactory->close(factory->vFactory);
261 if (factory->nilStack != NULL)
263 factory->nilStack->free(factory->nilStack);
267 // cannot contain anything that was not made by this factory.
269 for (poolCount = 0; poolCount <= factory->thisPool; poolCount++)
273 ANTLR3_FREE(factory->pools[poolCount]);
274 factory->pools[poolCount] = NULL;
280 ANTLR3_FREE(factory->pools);
282 // Finally, we can free the space for the factory itself
284 ANTLR3_FREE(factory);
318 tree->baseTree.free = NULL; // Factory trees have no free function
333 // Non factory node constructors.
371 /// vector factory.
376 tree->children = ((pANTLR3_COMMON_TREE)(tree->super))->factory->vFactory->newVector(((pANTLR3_COMMON_TREE)(tree->super))->factory->vFactory);
404 return theOld->factory->newFromTree(theOld->factory, theOld);
536 if (cTree->factory != NULL)
544 cTree->factory->nilStack->push(cTree->factory->nilStack, tree, NULL);