Sasha Koshka
d6c8f57a81
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.
70 lines
2.4 KiB
Go
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
|
|
}
|