summaryrefslogtreecommitdiff
path: root/src/synthesis.cc
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2015-01-17 13:44:55 -0500
committerAdrian Thurston <thurston@complang.org>2015-01-17 13:44:55 -0500
commitcad4bb566197026fbdaddb2762cd622ef6678dec (patch)
tree597193e8b79a38838512b68c51b6b1b1fd425ef2 /src/synthesis.cc
parent986766e7b9305ceb7856a96941ce919bb3885570 (diff)
downloadcolm-cad4bb566197026fbdaddb2762cd622ef6678dec.tar.gz
can now address key in a map element
Diffstat (limited to 'src/synthesis.cc')
-rw-r--r--src/synthesis.cc22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/synthesis.cc b/src/synthesis.cc
index f373d137..91856383 100644
--- a/src/synthesis.cc
+++ b/src/synthesis.cc
@@ -2693,6 +2693,8 @@ void ObjectField::initField()
inSetWV = IN_SET_FIELD_WV;
break;
+ case GenericElementType:
+ case GenericDependentType:
case StructFieldType:
inGetR = IN_GET_STRUCT_R;
inGetWC = IN_GET_STRUCT_WC;
@@ -2742,6 +2744,22 @@ void ObjectDef::placeField( Compiler *pd, ObjectField *field )
field->offset = -nextOffset;
break;
+
+ case ObjectField::GenericElementType: {
+
+ /* Tree object frame fields. Record the position, then move the
+ * running offset. */
+ field->offset = nextOffset;
+ nextOffset += sizeOfField( fieldUT );
+
+ if ( fieldUT->generic->typeId == GEN_MAP_EL ) {
+ if ( field->mapKeyField != 0 )
+ field->mapKeyField->offset = field->offset;
+ }
+
+ break;
+ }
+
case ObjectField::UserFieldType:
/* Tree object frame fields. Record the position, then move the
@@ -2755,6 +2773,10 @@ void ObjectDef::placeField( Compiler *pd, ObjectField *field )
nextOffset += sizeOfField( fieldUT );
break;
+ case ObjectField::GenericDependentType:
+ /* There is an object field that this type depends on. When it is
+ * placed, this one will be placed as well. Nothing to do now. */
+
case ObjectField::InbuiltFieldType:
case ObjectField::InbuiltOffType:
case ObjectField::InbuiltObjectType: