compiler, reflect: add map key and element type info
Этот коммит содержится в:
		
							родитель
							
								
									cdf785629a
								
							
						
					
					
						коммит
						60a93e8e2d
					
				
					 2 изменённых файлов: 13 добавлений и 0 удалений
				
			
		|  | @ -131,6 +131,8 @@ func (c *compilerContext) getTypeCode(typ types.Type) llvm.Value { | |||
| 		case *types.Map: | ||||
| 			typeFieldTypes = append(typeFieldTypes, | ||||
| 				types.NewVar(token.NoPos, nil, "ptrTo", types.Typ[types.UnsafePointer]), | ||||
| 				types.NewVar(token.NoPos, nil, "elementType", types.Typ[types.UnsafePointer]), | ||||
| 				types.NewVar(token.NoPos, nil, "keyType", types.Typ[types.UnsafePointer]), | ||||
| 			) | ||||
| 		case *types.Struct: | ||||
| 			typeFieldTypes = append(typeFieldTypes, | ||||
|  | @ -193,6 +195,8 @@ func (c *compilerContext) getTypeCode(typ types.Type) llvm.Value { | |||
| 		case *types.Map: | ||||
| 			typeFields = []llvm.Value{ | ||||
| 				c.getTypeCode(types.NewPointer(typ)), // ptrTo | ||||
| 				c.getTypeCode(typ.Elem()),            // elem | ||||
| 				c.getTypeCode(typ.Key()),             // key | ||||
| 			} | ||||
| 		case *types.Struct: | ||||
| 			typeFields = []llvm.Value{ | ||||
|  |  | |||
|  | @ -33,6 +33,8 @@ | |||
| // - map types (this is still missing the key and element types) | ||||
| //     meta         uint8 | ||||
| //     ptrTo        *typeStruct | ||||
| //     elem         *typeStruct | ||||
| //     key          *typeStruct | ||||
| // - struct types (see structType): | ||||
| //     meta         uint8 | ||||
| //     numField     uint16 | ||||
|  | @ -408,6 +410,13 @@ type arrayType struct { | |||
| 	arrayLen uintptr | ||||
| } | ||||
| 
 | ||||
| type mapType struct { | ||||
| 	rawType | ||||
| 	ptrTo *rawType | ||||
| 	elem  *rawType | ||||
| 	key   *rawType | ||||
| } | ||||
| 
 | ||||
| // Type for struct types. The numField value is intentionally put before ptrTo | ||||
| // for better struct packing on 32-bit and 64-bit architectures. On these | ||||
| // architectures, the ptrTo field still has the same offset as in all the other | ||||
|  |  | |||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче
	
	 Damian Gryski
						Damian Gryski