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.
This commit is contained in:
parent
a5b1385012
commit
d6c8f57a81
@ -13,7 +13,7 @@ type DataSection struct {
|
||||
|
||||
// ToString returns all data stored within the data section, in string form.
|
||||
func (section DataSection) ToString (indent int) (output string) {
|
||||
output += doIndent(indent, "typeSection ")
|
||||
output += doIndent(indent, "dataSection ")
|
||||
output += section.permission.ToString() + " "
|
||||
output += section.where.ToString()
|
||||
output += "\n"
|
||||
|
@ -203,7 +203,7 @@ func (literal StringLiteral) canBePassedAs (what Type) (allowed bool) {
|
||||
// we don't check the length of what, becasue when setting a static
|
||||
// array to a string literal, excess data will be cut off (and if it is
|
||||
// shorter, the excess space will be filled with zeros).
|
||||
|
||||
|
||||
reduced, worked := what.reduce()
|
||||
if worked {
|
||||
// if the type was reduced to a non-basic type, only pass to
|
||||
@ -211,8 +211,10 @@ func (literal StringLiteral) canBePassedAs (what Type) (allowed bool) {
|
||||
if !what.isSingular() { return }
|
||||
if reduced.kind != TypeKindVariableArray { return }
|
||||
what = reduced
|
||||
allowed = what.points.isNumeric()
|
||||
} else {
|
||||
allowed = what.isNumeric()
|
||||
}
|
||||
|
||||
allowed = what.isNumeric()
|
||||
return
|
||||
}
|
||||
|
@ -3,43 +3,43 @@ 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 {})
|
||||
var PrimitiveF32 = createPrimitive("F32", Type { length: 1 })
|
||||
|
||||
// PrimitiveF64 is a 64 bit floating point primitive.
|
||||
var PrimitiveF64 = createPrimitive("F64", Type {})
|
||||
var PrimitiveF64 = createPrimitive("F64", Type { length: 1 })
|
||||
|
||||
// PrimitiveInt is a signed integer word primitive.
|
||||
var PrimitiveInt = createPrimitive("Int", Type {})
|
||||
var PrimitiveInt = createPrimitive("Int", Type { length: 1 })
|
||||
|
||||
// PrimitiveUInt is an unsigned integer word primitive.
|
||||
var PrimitiveUInt = createPrimitive("UInt", Type {})
|
||||
var PrimitiveUInt = createPrimitive("UInt", Type { length: 1 })
|
||||
|
||||
// PrimitiveI8 is a signed 8 bit integer primitive.
|
||||
var PrimitiveI8 = createPrimitive("I8", Type {})
|
||||
var PrimitiveI8 = createPrimitive("I8", Type { length: 1 })
|
||||
|
||||
// PrimitiveI16 is a signed 16 bit integer primitive.
|
||||
var PrimitiveI16 = createPrimitive("I16", Type {})
|
||||
var PrimitiveI16 = createPrimitive("I16", Type { length: 1 })
|
||||
|
||||
// PrimitiveI32 is a signed 32 bit integer primitive.
|
||||
var PrimitiveI32 = createPrimitive("I32", Type {})
|
||||
var PrimitiveI32 = createPrimitive("I32", Type { length: 1 })
|
||||
|
||||
// PrimitiveI64 is a signed 64 bit integer primitive.
|
||||
var PrimitiveI64 = createPrimitive("I64", Type {})
|
||||
var PrimitiveI64 = createPrimitive("I64", Type { length: 1 })
|
||||
|
||||
// PrimitiveI8 is an unsigned 8 bit integer primitive.
|
||||
var PrimitiveU8 = createPrimitive("U8", Type {})
|
||||
var PrimitiveU8 = createPrimitive("U8", Type { length: 1 })
|
||||
|
||||
// PrimitiveI16 is an unsigned 16 bit integer primitive.
|
||||
var PrimitiveU16 = createPrimitive("U16", Type {})
|
||||
var PrimitiveU16 = createPrimitive("U16", Type { length: 1 })
|
||||
|
||||
// PrimitiveI32 is an unsigned 32 bit integer primitive.
|
||||
var PrimitiveU32 = createPrimitive("U32", Type {})
|
||||
var PrimitiveU32 = createPrimitive("U32", Type { length: 1 })
|
||||
|
||||
// PrimitiveI64 is an unsigned 64 bit integer primitive.
|
||||
var PrimitiveU64 = createPrimitive("U64", Type {})
|
||||
var PrimitiveU64 = createPrimitive("U64", Type { length: 1 })
|
||||
|
||||
// PrimitiveObj is a blank object primitive.
|
||||
var PrimitiveObj = createPrimitive("Obj", Type {})
|
||||
var PrimitiveObj = createPrimitive("Obj", Type { length: 1 })
|
||||
|
||||
// TODO: make these two be interface sections
|
||||
|
||||
@ -52,8 +52,12 @@ var PrimitiveObj = createPrimitive("Obj", Type {})
|
||||
// BuiltInString is a built in string type. It is a dynamic array of UTF-32
|
||||
// codepoints.
|
||||
var BuiltInString = createPrimitive("String", Type {
|
||||
actual: &PrimitiveU32,
|
||||
points: &Type {
|
||||
actual: &PrimitiveU32,
|
||||
length: 1,
|
||||
},
|
||||
kind: TypeKindVariableArray,
|
||||
length: 1,
|
||||
})
|
||||
|
||||
// createPrimitive provides a quick way to construct a primitive for the above
|
||||
|
Reference in New Issue
Block a user