diff options
author | Adrian Thurston <thurston@complang.org> | 2015-01-17 13:44:55 -0500 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2015-01-17 13:44:55 -0500 |
commit | cad4bb566197026fbdaddb2762cd622ef6678dec (patch) | |
tree | 597193e8b79a38838512b68c51b6b1b1fd425ef2 /src/synthesis.cc | |
parent | 986766e7b9305ceb7856a96941ce919bb3885570 (diff) | |
download | colm-cad4bb566197026fbdaddb2762cd622ef6678dec.tar.gz |
can now address key in a map element
Diffstat (limited to 'src/synthesis.cc')
-rw-r--r-- | src/synthesis.cc | 22 |
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: |