diff options
Diffstat (limited to 'compiler/sizealignoffsetimpl.nim')
-rw-r--r-- | compiler/sizealignoffsetimpl.nim | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/compiler/sizealignoffsetimpl.nim b/compiler/sizealignoffsetimpl.nim index 987bcde99..e07d55fbc 100644 --- a/compiler/sizealignoffsetimpl.nim +++ b/compiler/sizealignoffsetimpl.nim @@ -12,7 +12,7 @@ proc align(address, alignment: BiggestInt): BiggestInt = result = (address + (alignment - 1)) and not (alignment - 1) -proc align(address, alignment: int): int = +proc align(address, alignment: int32): int32 = result = (address + (alignment - 1)) and not (alignment - 1) const @@ -30,24 +30,24 @@ proc raiseIllegalTypeRecursion() = type OffsetAccum = object - maxAlign: int - offset: int + maxAlign: int32 + offset: int32 -proc inc(arg: var OffsetAccum; value: int) = +proc inc(arg: var OffsetAccum; value: int32) = if unlikely(value == szIllegalRecursion): raiseIllegalTypeRecursion() if value == szUnknownSize or arg.offset == szUnknownSize: arg.offset = szUnknownSize else: arg.offset += value -proc alignmentMax(a, b: int): int = +proc alignmentMax(a, b: int32): int32 = if unlikely(a == szIllegalRecursion or b == szIllegalRecursion): raiseIllegalTypeRecursion() if a == szUnknownSize or b == szUnknownSize: szUnknownSize else: max(a, b) -proc align(arg: var OffsetAccum; value: int) = +proc align(arg: var OffsetAccum; value: int32) = if unlikely(value == szIllegalRecursion): raiseIllegalTypeRecursion() if value == szUnknownSize or arg.maxAlign == szUnknownSize or arg.offset == szUnknownSize: arg.maxAlign = szUnknownSize @@ -65,7 +65,7 @@ proc mergeBranch(arg: var OffsetAccum; value: OffsetAccum) = arg.offset = max(arg.offset, value.offset) arg.maxAlign = max(arg.maxAlign, value.maxAlign) -proc finish(arg: var OffsetAccum): int = +proc finish(arg: var OffsetAccum): int32 = if arg.maxAlign == szUnknownSize or arg.offset == szUnknownSize: result = szUnknownSize arg.offset = szUnknownSize @@ -122,20 +122,20 @@ proc computeObjectOffsetsFoldFunction(conf: ConfigRef; n: PNode; packed: bool; a of nkRecCase: assert(n[0].kind == nkSym) computeObjectOffsetsFoldFunction(conf, n[0], packed, accum) - var maxChildAlign: int = if accum.offset == szUnknownSize: szUnknownSize else: 1 + var maxChildAlign = if accum.offset == szUnknownSize: szUnknownSize.int32 else: 1'i32 if not packed: for i in 1..<n.len: let child = n[i] case child.kind of nkOfBranch, nkElse: # offset parameter cannot be known yet, it needs to know the alignment first - let align = int(computeSubObjectAlign(conf, n[i].lastSon)) + let align = int32(computeSubObjectAlign(conf, n[i].lastSon)) maxChildAlign = alignmentMax(maxChildAlign, align) else: internalError(conf, "computeObjectOffsetsFoldFunction(record case branch)") if maxChildAlign == szUnknownSize: setOffsetsToUnknown(n) - accum.offset = szUnknownSize + accum.offset = szUnknownSize accum.maxAlign = szUnknownSize else: # the union needs to be aligned first, before the offsets can be assigned @@ -150,15 +150,15 @@ proc computeObjectOffsetsFoldFunction(conf: ConfigRef; n: PNode; packed: bool; a for i, child in n.sons: computeObjectOffsetsFoldFunction(conf, child, packed, accum) of nkSym: - var size = szUnknownSize - var align = szUnknownSize + var size = szUnknownSize.int32 + var align = szUnknownSize.int32 if n.sym.bitsize == 0: # 0 represents bitsize not set computeSizeAlign(conf, n.sym.typ) - size = n.sym.typ.size.int - align = if packed: 1 else: n.sym.typ.align.int + size = n.sym.typ.size.int32 + align = if packed: 1 else: n.sym.typ.align.int32 accum.align(align) if n.sym.alignment > 0: - accum.align(n.sym.alignment) + accum.align(n.sym.alignment.int32) n.sym.offset = accum.offset accum.inc(size) else: @@ -180,15 +180,15 @@ proc computeUnionObjectOffsetsFoldFunction(conf: ConfigRef; n: PNode; packed: bo discard finish(branchAccum) accum.mergeBranch(branchAccum) of nkSym: - var size = szUnknownSize - var align = szUnknownSize + var size = szUnknownSize.int32 + var align = szUnknownSize.int32 if n.sym.bitsize == 0: # 0 represents bitsize not set computeSizeAlign(conf, n.sym.typ) - size = n.sym.typ.size.int - align = if packed: 1 else: n.sym.typ.align.int + size = n.sym.typ.size.int32 + align = if packed: 1 else: n.sym.typ.align.int32 accum.align(align) if n.sym.alignment > 0: - accum.align(n.sym.alignment) + accum.align(n.sym.alignment.int32) n.sym.offset = accum.offset accum.inc(size) else: @@ -339,7 +339,7 @@ proc computeSizeAlign(conf: ConfigRef; typ: PType) = if typ.n != nil: # is named tuple (has field symbols)? let sym = typ.n[i].sym sym.offset = accum.offset - accum.inc(int(child.size)) + accum.inc(int32(child.size)) typ.paddingAtEnd = int16(accum.finish()) typ.size = if accum.offset == 0: 1 else: accum.offset typ.align = int16(accum.maxAlign) @@ -359,19 +359,19 @@ proc computeSizeAlign(conf: ConfigRef; typ: PType) = computeSizeAlign(conf, st) if conf.backend == backendCpp: OffsetAccum( - offset: int(st.size) - int(st.paddingAtEnd), + offset: int32(st.size) - int32(st.paddingAtEnd), maxAlign: st.align ) else: OffsetAccum( - offset: int(st.size), + offset: int32(st.size), maxAlign: st.align ) elif isObjectWithTypeFieldPredicate(typ): # this branch is taken for RootObj OffsetAccum( - offset: conf.target.intSize, - maxAlign: conf.target.intSize + offset: conf.target.intSize.int32, + maxAlign: conf.target.intSize.int32 ) else: OffsetAccum(maxAlign: 1) |