summaryrefslogtreecommitdiff
path: root/src/struct.c
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2015-01-27 10:04:21 -0500
committerAdrian Thurston <thurston@complang.org>2015-01-27 10:04:21 -0500
commit680cdd650f327b28129f23bf027ca5fa79b44ae3 (patch)
treeaed240b12154d39e989907de17957de7b48569ed /src/struct.c
parentd97898e259de2165599818287132ba1ee80390a2 (diff)
downloadcolm-680cdd650f327b28129f23bf027ca5fa79b44ae3.tar.gz
function name cleanup
Diffstat (limited to 'src/struct.c')
-rw-r--r--src/struct.c44
1 files changed, 34 insertions, 10 deletions
diff --git a/src/struct.c b/src/struct.c
index 8915ec2b..36264319 100644
--- a/src/struct.c
+++ b/src/struct.c
@@ -2,10 +2,12 @@
#include <colm/struct.h>
#include "internal.h"
+#include "bytecode.h"
#include <stdlib.h>
#include <string.h>
#include <assert.h>
+#include <stdbool.h>
struct colm_tree *colm_get_global( Program *prg, long pos )
{
@@ -94,16 +96,6 @@ Parser *colm_parser_new( Program *prg, GenericInfo *gi )
return parser;
}
-Stream *colm_stream_new_struct( Program *prg )
-{
- size_t memsize = sizeof(struct colm_stream);
- struct colm_stream *stream = (struct colm_stream*) malloc( memsize );
- memset( stream, 0, memsize );
- colm_struct_add( prg, (struct colm_struct *)stream );
- stream->id = STRUCT_INBUILT_ID;
- return stream;
-}
-
void colm_map_destroy( Program *prg, Tree **sp, struct colm_struct *s )
{
struct colm_map *map = (struct colm_map*) s;
@@ -126,3 +118,35 @@ Map *colm_map_new( struct colm_program *prg )
map->id = STRUCT_INBUILT_ID;
return map;
}
+
+Struct *colm_construct_generic( Program *prg, long genericId )
+{
+ GenericInfo *genericInfo = &prg->rtd->genericInfo[genericId];
+ Struct *newGeneric = 0;
+ switch ( genericInfo->type ) {
+ case GEN_MAP_EL:
+ case GEN_LIST_EL:
+ break;
+
+ case GEN_MAP: {
+ Map *map = colm_map_new( prg );
+ map->genericInfo = genericInfo;
+ newGeneric = (Struct*) map;
+ break;
+ }
+ case GEN_LIST: {
+ List *list = colm_list_new( prg );
+ list->genericInfo = genericInfo;
+ newGeneric = (Struct*) list;
+ break;
+ }
+ case GEN_PARSER: {
+ Parser *parser = colm_parser_new( prg, genericInfo );
+ parser->input = colm_stream_new( prg );
+ newGeneric = (Struct*) parser;
+ break;
+ }
+ }
+
+ return newGeneric;
+}