diff --git a/analyzer/data-section.go b/analyzer/data-section.go index 23f66e6..42aca03 100644 --- a/analyzer/data-section.go +++ b/analyzer/data-section.go @@ -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" diff --git a/analyzer/literals.go b/analyzer/literals.go index 35a64d4..e1a090c 100644 --- a/analyzer/literals.go +++ b/analyzer/literals.go @@ -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 } diff --git a/analyzer/primitives.go b/analyzer/primitives.go index 1c6b318..3b92d68 100644 --- a/analyzer/primitives.go +++ b/analyzer/primitives.go @@ -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