summaryrefslogtreecommitdiff
path: root/src/declare.cc
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2015-01-05 14:23:39 -0500
committerAdrian Thurston <thurston@complang.org>2015-01-05 14:23:39 -0500
commitb383decdd1652dc3384a24a57971283e40dd9b71 (patch)
tree6808f1706755740fffd0391e638625da458d209c /src/declare.cc
parentdedc10d8fa47f41afb0e700786b374fda944090c (diff)
downloadcolm-b383decdd1652dc3384a24a57971283e40dd9b71.tar.gz
some work on list access and traversal
Diffstat (limited to 'src/declare.cc')
-rw-r--r--src/declare.cc30
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 );