This repository has been archived on 2024-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
arf/analyzer/primitives.go
Sasha Koshka d6c8f57a81 Fixed type checking for string literals
The string builtin was incorrectly described, and
StringLiteral.canBePassedAs was checking the type actual instead of
the type points in the case of a reducible type.
2022-10-17 01:40:00 -04:00

70 lines
2.4 KiB
Go

package analyzer
// This is a global, cannonical list of primitive and built-in types.
// PrimitiveF32 is a 32 bit floating point primitive.
var PrimitiveF32 = createPrimitive("F32", Type { length: 1 })
// PrimitiveF64 is a 64 bit floating point primitive.
var PrimitiveF64 = createPrimitive("F64", Type { length: 1 })
// PrimitiveInt is a signed integer word primitive.
var PrimitiveInt = createPrimitive("Int", Type { length: 1 })
// PrimitiveUInt is an unsigned integer word primitive.
var PrimitiveUInt = createPrimitive("UInt", Type { length: 1 })
// PrimitiveI8 is a signed 8 bit integer primitive.
var PrimitiveI8 = createPrimitive("I8", Type { length: 1 })
// PrimitiveI16 is a signed 16 bit integer primitive.
var PrimitiveI16 = createPrimitive("I16", Type { length: 1 })
// PrimitiveI32 is a signed 32 bit integer primitive.
var PrimitiveI32 = createPrimitive("I32", Type { length: 1 })
// PrimitiveI64 is a signed 64 bit integer primitive.
var PrimitiveI64 = createPrimitive("I64", Type { length: 1 })
// PrimitiveI8 is an unsigned 8 bit integer primitive.
var PrimitiveU8 = createPrimitive("U8", Type { length: 1 })
// PrimitiveI16 is an unsigned 16 bit integer primitive.
var PrimitiveU16 = createPrimitive("U16", Type { length: 1 })
// PrimitiveI32 is an unsigned 32 bit integer primitive.
var PrimitiveU32 = createPrimitive("U32", Type { length: 1 })
// PrimitiveI64 is an unsigned 64 bit integer primitive.
var PrimitiveU64 = createPrimitive("U64", Type { length: 1 })
// PrimitiveObj is a blank object primitive.
var PrimitiveObj = createPrimitive("Obj", Type { length: 1 })
// TODO: make these two be interface sections
// PrimitiveFace is a blank interface primitive. It accepts any value.
// var PrimitiveFace = createPrimitive("Face", Type {})
// PrimitiveFunc is a blank function interface primitive. It is useless.
// var PrimitiveFunc = createPrimitive("Func", Type {})
// BuiltInString is a built in string type. It is a dynamic array of UTF-32
// codepoints.
var BuiltInString = createPrimitive("String", Type {
points: &Type {
actual: &PrimitiveU32,
length: 1,
},
kind: TypeKindVariableArray,
length: 1,
})
// createPrimitive provides a quick way to construct a primitive for the above
// list.
func createPrimitive (name string, inherits Type) (primitive TypeSection) {
primitive.where = locator { name: name }
primitive.what = inherits
return
}