コード例 #1
0
ファイル: codegen.go プロジェクト: dansawkins/ark
func (v *Codegen) genDefaultValue(typ parser.Type) llvm.Value {
	typ = typ.ActualType()

	// Generate default struct values
	if structType, ok := typ.(*parser.StructType); ok {
		lit := createStructInitializer(structType)
		if lit != nil {
			return v.genStructLiteral(lit)
		} else {
			return llvm.Undef(v.typeToLLVMType(structType))
		}
	}

	if tupleType, ok := typ.(*parser.TupleType); ok {
		values := make([]llvm.Value, len(tupleType.Members))
		for idx, member := range tupleType.Members {
			values[idx] = v.genDefaultValue(member)
		}
		return llvm.ConstStruct(values, false)
	}

	if typ.IsIntegerType() || typ == parser.PRIMITIVE_bool {
		return llvm.ConstInt(v.typeToLLVMType(typ), 0, false)
	}

	if typ.IsFloatingType() {
		return llvm.ConstFloat(v.typeToLLVMType(typ), 0)
	}

	panic("type does not have default value: " + typ.TypeName())
}