diff options
-rw-r--r-- | src/bytecode.c | 4 | ||||
-rw-r--r-- | src/bytecode.h | 10 | ||||
-rw-r--r-- | src/compiler.h | 12 | ||||
-rw-r--r-- | src/declare.cc | 86 | ||||
-rw-r--r-- | src/parsetree.h | 4 | ||||
-rw-r--r-- | src/resolve.cc | 14 | ||||
-rw-r--r-- | src/tree.c | 33 |
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 ); @@ -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; } } |