package analyzer import "git.tebibyte.media/sashakoshka/fspl/entity" var primitiveTypes = map[string] entity.Type { "Int": &entity.TypeWord { Signed: true }, "UInt": &entity.TypeWord { }, "I8": &entity.TypeInt { Signed: true, Width: 8 }, "I16": &entity.TypeInt { Signed: true, Width: 16 }, "I32": &entity.TypeInt { Signed: true, Width: 32 }, "I64": &entity.TypeInt { Signed: true, Width: 64 }, "U8": &entity.TypeInt { Signed: false, Width: 8 }, "U16": &entity.TypeInt { Signed: false, Width: 16 }, "U32": &entity.TypeInt { Signed: false, Width: 32 }, "U64": &entity.TypeInt { Signed: false, Width: 64 }, "F32": &entity.TypeFloat { Width: 32 }, "F64": &entity.TypeFloat { Width: 64 }, } var builtinTypes = map[string] entity.Type { } func builtinType (name string) *entity.TypeNamed { ty, ok := builtinTypes[name] if !ok { panic("BUG: compiler tried to reference missing builtin " + name) } return &entity.TypeNamed { Name: name, Type: ty, } } func primitiveType (name string) *entity.TypeNamed { ty, ok := primitiveTypes[name] if !ok { panic("BUG: compiler tried to reference missing primitive " + name) } return &entity.TypeNamed { Name: name, Type: ty, } } func init () { builtinTypes["Index"] = &entity.TypeWord { } builtinTypes["Byte"] = &entity.TypeInt { Signed: false, Width: 8 } builtinTypes["Rune"] = &entity.TypeInt { Signed: false, Width: 32 } builtinTypes["String"] = &entity.TypeSlice { Element: &entity.TypeInt { Signed: false, Width: 8 }, } }