package generator import "fmt" import "git.tebibyte.media/sashakoshka/fspl/llvm" import "git.tebibyte.media/sashakoshka/fspl/entity" func (this *generator) generateTypedef ( def *entity.Typedef, ) ( llvm.Type, error, ) { irType, err := this.generateType(def.Type) if err != nil { return nil, err } return this.module.NewType(def.Name, irType), nil } func (this *generator) generateType (ty entity.Type) (llvm.Type, error) { switch ty.(type) { case nil: return llvm.Void, nil case *entity.TypeNamed: return this.generateTypeNamed(ty.(*entity.TypeNamed)) case *entity.TypePointer: return this.generateTypePointer(ty.(*entity.TypePointer)) case *entity.TypeSlice: return this.generateTypeSlice(ty.(*entity.TypeSlice)) case *entity.TypeArray: return this.generateTypeArray(ty.(*entity.TypeArray)) case *entity.TypeStruct: return this.generateTypeStruct(ty.(*entity.TypeStruct)) case *entity.TypeInterface: return this.generateTypeInerface(ty.(*entity.TypeInterface)) case *entity.TypeInt: return this.generateTypeInt(ty.(*entity.TypeInt)) case *entity.TypeFloat: return this.generateTypeFloat(ty.(*entity.TypeFloat)) case *entity.TypeWord: return this.generateTypeWord(ty.(*entity.TypeWord)) default: panic(fmt.Sprintln("generator doesn't know about type", ty)) } }