diff options
author | Adrian Thurston <thurston@complang.org> | 2015-01-05 14:23:39 -0500 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2015-01-05 14:23:39 -0500 |
commit | b383decdd1652dc3384a24a57971283e40dd9b71 (patch) | |
tree | 6808f1706755740fffd0391e638625da458d209c /src/declare.cc | |
parent | dedc10d8fa47f41afb0e700786b374fda944090c (diff) | |
download | colm-b383decdd1652dc3384a24a57971283e40dd9b71.tar.gz |
some work on list access and traversal
Diffstat (limited to 'src/declare.cc')
-rw-r--r-- | src/declare.cc | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/src/declare.cc b/src/declare.cc index a1e66843..ab3f2da6 100644 --- a/src/declare.cc +++ b/src/declare.cc @@ -297,9 +297,10 @@ void GenericType::declare( Compiler *pd, Namespace *nspace ) case GEN_LIST: pd->initListFunctions( this ); pd->initListFields( this ); + pd->initListElFields( this ); break; case GEN_LIST_EL: - pd->initListElFields( this ); +// pd->initListElFields( this ); break; case GEN_PARSER: utArg->langEl->parserId = pd->nextParserId++; @@ -927,15 +928,14 @@ void Compiler::initListFunctions( GenericType *gen ) void Compiler::initListElField( GenericType *gen, const char *name, int offset ) { -#if 0 - TypeRef *typeRef = TypeRef::cons( - internal, TypeRef::ListEl, 0, gen->typeArg, 0 ); - - typeRef->resolveType( this ); +// TypeRef *typeRef = TypeRef::cons( +// internal, TypeRef::ListEl, 0, gen->typeArg, 0 ); +// +// typeRef->resolveType( this ); /* Make the type ref and create the field. */ ObjectField *el = ObjectField::cons( internal, - ObjectField::InbuiltOffType, typeRef, name ); + ObjectField::InbuiltOffType, gen->typeArg, name ); el->inGetR = IN_GET_LIST_EL_MEM_R; el->inGetValR = IN_GET_LIST_EL_MEM_R; @@ -944,28 +944,22 @@ void Compiler::initListElField( GenericType *gen, const char *name, int offset ) // el->inSetWC = IN_SET_LIST2EL_MEM_WC; // el->inSetWV = IN_SET_LIST2EL_MEM_WV; - gen->objDef->rootScope->insertField( el->name, el ); - /* Zero for head, One for tail. */ el->offset = offset; -#endif + + gen->utArg->structEl->context->objectDef->rootScope->insertField( el->name, el ); + } void Compiler::initListElFields( GenericType *gen ) { - initListElField( gen, "next", 0 ); - initListElField( gen, "value", 2 ); + initListElField( gen, "prev", 0 ); + initListElField( gen, "next", 1 ); } void Compiler::initListField( GenericType *gen, const char *name, int offset ) { -// /* Type reference for the list element. */ -// TypeRef *typeRef = TypeRef::cons( -// internal, TypeRef::ListEl, 0, gen->typeArg, 0 ); -// -// typeRef->resolveType( this ); - /* Make the type ref and create the field. */ ObjectField *el = ObjectField::cons( internal, ObjectField::InbuiltOffType, gen->typeArg, name ); |