summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bytecode.c4
-rw-r--r--src/bytecode.h10
-rw-r--r--src/compiler.h12
-rw-r--r--src/declare.cc86
-rw-r--r--src/parsetree.h4
-rw-r--r--src/resolve.cc14
-rw-r--r--src/tree.c33
7 files changed, 37 insertions, 126 deletions
diff --git a/src/bytecode.c b/src/bytecode.c
index 57e0ed92..8d24fd7b 100644
--- a/src/bytecode.c
+++ b/src/bytecode.c
@@ -3858,8 +3858,8 @@ again:
read_half( field );
debug( prg, REALM_BYTECODE, "IN_LOAD_ARGV %lu\n", field );
- List *tree = constructArgv( prg, prg->argc, prg->argv );
- colm_struct_set_field( prg->global, field, tree );
+ List *list = constructArgv( prg, prg->argc, prg->argv );
+ colm_struct_set_field_type( prg->global, List*, field, list );
break;
}
case IN_INIT_LOCALS: {
diff --git a/src/bytecode.h b/src/bytecode.h
index 0e71ad8c..f4be8826 100644
--- a/src/bytecode.h
+++ b/src/bytecode.h
@@ -367,12 +367,10 @@ enum TYPE
/* Types of Generics. */
enum GEN {
GEN_LIST = 0x10,
- GEN_MAP = 0x11,
- GEN_PARSER = 0x13,
- GEN_LIST2EL = 0x14,
- GEN_LIST2 = 0x15,
- GEN_MAP2EL = 0x16,
- GEN_MAP2 = 0x17,
+ GEN_LIST_EL = 0x11,
+ GEN_MAP = 0x12,
+ GEN_MAP_EL = 0x13,
+ GEN_PARSER = 0x14,
};
/* Known language element ids. */
diff --git a/src/compiler.h b/src/compiler.h
index 600552f8..5b2723c5 100644
--- a/src/compiler.h
+++ b/src/compiler.h
@@ -742,19 +742,15 @@ struct Compiler
void initListField( GenericType *gen, const char *name, int offset );
void initListFields( GenericType *gen );
void initListFunctions( GenericType *gen );
+ void initListElFields( GenericType *gen );
+ void initListElField( GenericType *gen, const char *name, int offset );
void initVectorFunctions( GenericType *gen );
- void initParserField( GenericType *gen, const char *name, int offset, TypeRef *typeRef );
+ void initParserField( GenericType *gen, const char *name,
+ int offset, TypeRef *typeRef );
void initParserFunctions( GenericType *gen );
void initParserFields( GenericType *gen );
void initCtxField( GenericType *gen );
- void initList2Field( GenericType *gen, const char *name, int offset );
- void initList2ElFields( GenericType *gen );
- void initList2ElField( GenericType *gen, const char *name, int offset );
- void initList2Functions( GenericType *gen );
- void initList2Fields( GenericType *gen );
- void initMap2Functions( GenericType *gen );
-
void addStdin();
void addStdout();
void addStderr();
diff --git a/src/declare.cc b/src/declare.cc
index f2a54654..2a7077f4 100644
--- a/src/declare.cc
+++ b/src/declare.cc
@@ -322,22 +322,15 @@ void GenericType::declare( Compiler *pd, Namespace *nspace )
pd->initListFunctions( this );
pd->initListFields( this );
break;
+ case GEN_LIST_EL:
+ pd->initListElFields( this );
+ break;
case GEN_PARSER:
utArg->langEl->parserId = pd->nextParserId++;
pd->initParserFunctions( this );
pd->initParserFields( this );
break;
- case GEN_LIST2EL:
- pd->initList2ElFields( this );
- break;
- case GEN_LIST2:
- pd->initList2Functions( this );
- pd->initList2Fields( this );
- break;
- case GEN_MAP2EL:
- break;
- case GEN_MAP2:
- pd->initMap2Functions( this );
+ case GEN_MAP_EL:
break;
}
@@ -375,7 +368,7 @@ void Namespace::declare( Compiler *pd )
}
for ( StructDefList::Iter s = structDefList; s.lte(); s++ )
- StructEl *sel = declareStruct( pd, this, s->name, s );
+ declareStruct( pd, this, s->name, s );
for ( TokenDefListNs::Iter tokenDef = tokenDefList; tokenDef.lte(); tokenDef++ ) {
/* Literals already taken care of. */
@@ -958,62 +951,13 @@ void Compiler::initListFunctions( GenericType *gen )
IN_LIST_POP_HEAD_WV, IN_LIST_POP_HEAD_WC, false );
}
-void Compiler::initList2Functions( GenericType *gen )
-{
-// addLengthField( gen->objDef, IN_LIST_LENGTH );
-//
-// initFunction( uniqueTypeInt, gen->objDef, "push_head",
-// IN_LIST_PUSH_HEAD_WV, IN_LIST_PUSH_HEAD_WC, gen->utArg, false );
-
- initFunction( uniqueTypeInt, gen->objDef, "push_tail",
- IN_LIST2_PUSH_TAIL_WV, IN_LIST2_PUSH_TAIL_WC, gen->utArg, false );
-
-// initFunction( uniqueTypeInt, gen->objDef, "push",
-// IN_LIST_PUSH_HEAD_WV, IN_LIST_PUSH_HEAD_WC, gen->utArg, false );
-//
-// initFunction( gen->utArg, gen->objDef, "pop_head",
-// IN_LIST_POP_HEAD_WV, IN_LIST_POP_HEAD_WC, false );
-//
-// initFunction( gen->utArg, gen->objDef, "pop_tail",
-// IN_LIST_POP_TAIL_WV, IN_LIST_POP_TAIL_WC, false );
-//
-// initFunction( gen->utArg, gen->objDef, "pop",
-// IN_LIST_POP_HEAD_WV, IN_LIST_POP_HEAD_WC, false );
-}
-
-void Compiler::initList2Field( GenericType *gen, const char *name, int offset )
+void Compiler::initListElField( GenericType *gen, const char *name, int offset )
{
/* Make the type ref and create the field. */
TypeRef *typeRef = TypeRef::cons( internal, gen->utArg );
ObjectField *el = ObjectField::cons( internal,
ObjectField::InbuiltOffType, typeRef, name );
- el->inGetR = IN_GET_LIST2_MEM_R;
-// el->inGetWC = IN_GET_LIST2_MEM_WC;
-// el->inGetWV = IN_GET_LIST2_MEM_WV;
-// el->inSetWC = IN_SET_LIST2_MEM_WC;
-// el->inSetWV = IN_SET_LIST2_MEM_WV;
-
- gen->objDef->rootScope->insertField( el->name, el );
-
- /* Zero for head, One for tail. */
- el->offset = offset;
-}
-
-
-void Compiler::initList2Fields( GenericType *gen )
-{
- initList2Field( gen, "head", 0 );
-// initListField( gen, "tail", 1 );
-// initListField( gen, "top", 0 );
-}
-
-void Compiler::initList2ElField( GenericType *gen, const char *name, int offset )
-{
- /* Make the type ref and create the field. */
- TypeRef *typeRef = TypeRef::cons( internal, gen->utArg );
- ObjectField *el = ObjectField::cons( internal, ObjectField::InbuiltOffType, typeRef, name );
-
el->inGetR = IN_GET_LIST2EL_MEM_R;
// el->inGetWC = IN_GET_LIST2EL_MEM_WC;
// el->inGetWV = IN_GET_LIST2EL_MEM_WV;
@@ -1027,23 +971,9 @@ void Compiler::initList2ElField( GenericType *gen, const char *name, int offset
}
-void Compiler::initList2ElFields( GenericType *gen )
-{
- initList2ElField( gen, "next", 0 );
-}
-
-void Compiler::initMap2Functions( GenericType *gen )
+void Compiler::initListElFields( GenericType *gen )
{
-// addLengthField( gen->objDef, IN_MAP_LENGTH );
-//
-// initFunction( gen->utArg, gen->objDef, "find",
-// IN_MAP_FIND, IN_MAP_FIND, gen->keyUT, true );
-// initFunction( uniqueTypeInt, gen->objDef, "insert",
-// IN_MAP_INSERT_WV, IN_MAP_INSERT_WC, gen->keyUT, gen->utArg, false );
-// initFunction( uniqueTypeInt, gen->objDef, "store",
-// IN_MAP_STORE_WV, IN_MAP_STORE_WC, gen->keyUT, gen->utArg, false );
-// initFunction( gen->utArg, gen->objDef, "remove",
-// IN_MAP_REMOVE_WV, IN_MAP_REMOVE_WC, gen->keyUT, false );
+ initListElField( gen, "next", 0 );
}
void Compiler::initListField( GenericType *gen, const char *name, int offset )
diff --git a/src/parsetree.h b/src/parsetree.h
index f4cbbfd9..b03722fd 100644
--- a/src/parsetree.h
+++ b/src/parsetree.h
@@ -708,9 +708,9 @@ struct GenericType
: public DListEl<GenericType>
{
GenericType( const String &name, long typeId, long id,
- LangEl *langEl, TypeRef *typeArg )
+ TypeRef *typeArg )
:
- name(name), typeId(typeId), id(id), langEl(langEl),
+ name(name), typeId(typeId), id(id), langEl(0),
typeArg(typeArg), keyTypeArg(0),
utArg(0), keyUT(0), objDef(0), elOffset(0)
{}
diff --git a/src/resolve.cc b/src/resolve.cc
index 92364ae7..b701a092 100644
--- a/src/resolve.cc
+++ b/src/resolve.cc
@@ -121,7 +121,7 @@ UniqueType *TypeRef::resolveTypeList( Compiler *pd )
String name( 36, "__list%d", listId++ );
GenericType *generic = new GenericType( name, GEN_LIST,
- pd->nextGenericId++, 0/*langEl*/, typeRef1 );
+ pd->nextGenericId++, typeRef1 );
nspace->genericList.append( generic );
@@ -150,8 +150,8 @@ UniqueType *TypeRef::resolveTypeListEl( Compiler *pd )
static int listId = 0;
String name( 36, "__list2el%d", listId++ );
- GenericType *generic = new GenericType( name, GEN_LIST2EL,
- pd->nextGenericId++, 0/*langEl*/, typeRef1 );
+ GenericType *generic = new GenericType( name, GEN_LIST_EL,
+ pd->nextGenericId++, typeRef1 );
nspace->genericList.append( generic );
@@ -182,7 +182,7 @@ UniqueType *TypeRef::resolveTypeMap( Compiler *pd )
String name( 36, "__map%d", mapId++ );
GenericType *generic = new GenericType( name, GEN_MAP,
- pd->nextGenericId++, 0/*langEl*/, typeRef2 );
+ pd->nextGenericId++, typeRef2 );
generic->keyTypeArg = typeRef1;
nspace->genericList.append( generic );
@@ -212,8 +212,8 @@ UniqueType *TypeRef::resolveTypeMapEl( Compiler *pd )
static int listId = 0;
String name( 36, "__map2el%d", listId++ );
- GenericType *generic = new GenericType( name, GEN_MAP2EL,
- pd->nextGenericId++, 0/*langEl*/, typeRef1 );
+ GenericType *generic = new GenericType( name, GEN_MAP_EL,
+ pd->nextGenericId++, typeRef1 );
nspace->genericList.append( generic );
@@ -243,7 +243,7 @@ UniqueType *TypeRef::resolveTypeParser( Compiler *pd )
String name( 36, "__accum%d", accumId++ );
GenericType *generic = new GenericType( name, GEN_PARSER,
- pd->nextGenericId++, 0/*langEl*/, typeRef1 );
+ pd->nextGenericId++, typeRef1 );
nspace->genericList.append( generic );
diff --git a/src/tree.c b/src/tree.c
index 256b16ed..4a41aa3f 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -960,33 +960,23 @@ Tree *constructGeneric( Program *prg, long genericId )
newGeneric = (Tree*) map;
break;
}
+ case GEN_MAP_EL: {
+ break;
+ }
case GEN_LIST: {
List *list = colm_list_new( prg );
list->genericInfo = genericInfo;
newGeneric = (Tree*) list;
break;
}
+ case GEN_LIST_EL: {
+ break;
+ }
case GEN_PARSER: {
Parser *parser = colm_parser_new( prg, genericInfo );
newGeneric = (Tree*) parser;
break;
}
- case GEN_LIST2EL: {
- break;
- }
- case GEN_LIST2: {
- List *list = (List*)mapElAllocate( prg );
- list->id = genericInfo->langElId;
- list->genericInfo = genericInfo;
- newGeneric = (Tree*) list;
- break;
- }
- case GEN_MAP2EL: {
- break;
- }
- case GEN_MAP2: {
- break;
- }
default:
assert(false);
return 0;
@@ -1082,16 +1072,13 @@ free_tree:
switch ( generic->type ) {
case GEN_LIST:
break;
- case GEN_MAP:
+ case GEN_LIST_EL:
break;
- case GEN_PARSER:
- break;
- case GEN_LIST2EL:
+ case GEN_MAP:
break;
- case GEN_LIST2:
+ case GEN_MAP_EL:
break;
- case GEN_MAP2EL:
- case GEN_MAP2:
+ case GEN_PARSER:
break;
}
}