diff options
-rwxr-xr-x | compiler/ast.nim | 4 | ||||
-rwxr-xr-x | compiler/ccgtypes.nim | 2 | ||||
-rwxr-xr-x | compiler/ecmasgen.nim | 10 | ||||
-rwxr-xr-x | lib/system/assign.nim | 6 | ||||
-rwxr-xr-x | lib/system/gc.nim | 2 | ||||
-rwxr-xr-x | lib/system/hti.nim | 5 | ||||
-rwxr-xr-x | lib/system/repr.nim | 4 |
7 files changed, 19 insertions, 14 deletions
diff --git a/compiler/ast.nim b/compiler/ast.nim index 200f32ed2..fb4300c89 100755 --- a/compiler/ast.nim +++ b/compiler/ast.nim @@ -265,6 +265,10 @@ type tyIter, # unused tyProxy # currently unused +const + tyPureObject* = tyTuple + +type TTypeKinds* = set[TTypeKind] TNodeFlag* = enum diff --git a/compiler/ccgtypes.nim b/compiler/ccgtypes.nim index 99f9ba3b0..0123b69f9 100755 --- a/compiler/ccgtypes.nim +++ b/compiler/ccgtypes.nim @@ -553,7 +553,7 @@ proc genTypeInfoAuxBase(m: BModule, typ: PType, name, base: PRope) = allocMemTI(m, typ, name) if (typ.kind == tyObject) and (tfFinal in typ.flags) and (typ.sons[0] == nil): - nimtypeKind = ord(high(TTypeKind)) + 1 # tyPureObject + nimtypeKind = ord(tyPureObject) else: nimtypeKind = ord(typ.kind) appf(m.s[cfsTypeInit3], diff --git a/compiler/ecmasgen.nim b/compiler/ecmasgen.nim index d597da193..42643b39e 100755 --- a/compiler/ecmasgen.nim +++ b/compiler/ecmasgen.nim @@ -86,7 +86,7 @@ proc initProc(p: var TProc, globals: PGlobals, module: BModule, procDef: PNode, const MappedToObject = {tyObject, tyArray, tyArrayConstr, tyTuple, tyOpenArray, - tySet, tyVar, tyRef, tyPtr} + tySet, tyVar, tyRef, tyPtr, tyBigNum} proc mapType(typ: PType): TEcmasTypeKind = var t = skipTypes(typ, abstractInst) @@ -99,13 +99,15 @@ proc mapType(typ: PType): TEcmasTypeKind = of tyPointer: # treat a tyPointer like a typed pointer to an array of bytes result = etyInt - of tyRange, tyDistinct, tyOrdinal: result = mapType(t.sons[0]) - of tyInt..tyInt64, tyEnum, tyChar: result = etyInt + of tyRange, tyDistinct, tyOrdinal, tyConst, tyMutable, tyIter, tyVarargs, + tyProxy: + result = mapType(t.sons[0]) + of tyInt..tyInt64, tyUInt..tyUInt64, tyEnum, tyChar: result = etyInt of tyBool: result = etyBool of tyFloat..tyFloat128: result = etyFloat of tySet: result = etyObject # map a set to a table of tyString, tySequence: result = etyInt # little hack to get right semantics - of tyObject, tyArray, tyArrayConstr, tyTuple, tyOpenArray: + of tyObject, tyArray, tyArrayConstr, tyTuple, tyOpenArray, tyBigNum: result = etyObject of tyNil: result = etyNull of tyGenericInst, tyGenericParam, tyGenericBody, tyGenericInvokation, tyNone, diff --git a/lib/system/assign.nim b/lib/system/assign.nim index 464dfb36c..9ba8cf614 100755 --- a/lib/system/assign.nim +++ b/lib/system/assign.nim @@ -62,7 +62,7 @@ proc genericAssignAux(dest, src: Pointer, mt: PNimType, shallow: bool) = var dstseq = cast[PGenericSeq](dst) dstseq.len = seq.len dstseq.space = seq.len - of tyObject, tyTuple, tyPureObject: + of tyObject, tyTuple: # we don't need to copy m_type field for tyObject, as they are equal anyway genericAssignAux(dest, src, mt.node, shallow) of tyArray, tyArrayConstr: @@ -121,7 +121,7 @@ proc objectInit(dest: Pointer, typ: PNimType) = var pint = cast[ptr PNimType](dest) pint[] = typ objectInitAux(dest, typ.node) - of tyTuple, tyPureObject: + of tyTuple: objectInitAux(dest, typ.node) of tyArray, tyArrayConstr: for i in 0..(typ.size div typ.base.size)-1: @@ -149,7 +149,7 @@ proc genericReset(dest: Pointer, mt: PNimType) = case mt.Kind of tyString, tyRef, tySequence: unsureAsgnRef(cast[ppointer](dest), nil) - of tyObject, tyTuple, tyPureObject: + of tyObject, tyTuple: # we don't need to reset m_type field for tyObject genericResetAux(dest, mt.node) of tyArray, tyArrayConstr: diff --git a/lib/system/gc.nim b/lib/system/gc.nim index d1fa98514..9e0e88612 100755 --- a/lib/system/gc.nim +++ b/lib/system/gc.nim @@ -301,7 +301,7 @@ proc forAllChildrenAux(dest: Pointer, mt: PNimType, op: TWalkOp) = case mt.Kind of tyRef, tyString, tySequence: # leaf: doOperation(cast[ppointer](d)[], op) - of tyObject, tyTuple, tyPureObject: + of tyObject, tyTuple: forAllSlotsAux(dest, mt.node, op) of tyArray, tyArrayConstr, tyOpenArray: for i in 0..(mt.size div mt.base.size)-1: diff --git a/lib/system/hti.nim b/lib/system/hti.nim index c5b6967ef..ff669be18 100755 --- a/lib/system/hti.nim +++ b/lib/system/hti.nim @@ -27,7 +27,7 @@ type # This should be he same as ast.TTypeKind tyOrdinal, tyArray, tyObject, - tyTuple, + tyTuple, # WARNING: The compiler uses tyTuple for pure objects! tySet, tyRange, tyPtr, tyRef, @@ -37,8 +37,7 @@ type # This should be he same as ast.TTypeKind tyPointer, tyOpenArray, tyString, tyCString, tyForward, tyInt, tyInt8, tyInt16, tyInt32, tyInt64, - tyFloat, tyFloat32, tyFloat64, tyFloat128, - tyPureObject # signals that object has no `n_type` field + tyFloat, tyFloat32, tyFloat64, tyFloat128 TNimNodeKind = enum nkNone, nkSlot, nkList, nkCase TNimNode {.codegenType, final.} = object diff --git a/lib/system/repr.nim b/lib/system/repr.nim index 6b940ccb4..82bc8aace 100755 --- a/lib/system/repr.nim +++ b/lib/system/repr.nim @@ -201,7 +201,7 @@ when not defined(useNimRtl): case typ.kind of tySet: reprSetAux(result, p, typ) of tyArray: reprArray(result, p, typ, cl) - of tyTuple, tyPureObject: reprRecord(result, p, typ, cl) + of tyTuple: reprRecord(result, p, typ, cl) of tyObject: var t = cast[ptr PNimType](p)[] reprRecord(result, p, t, cl) @@ -251,7 +251,7 @@ when not defined(useNimRtl): cl: TReprClosure initReprClosure(cl) result = "" - if typ.kind in {tyObject, tyPureObject, tyTuple, tyArray, tySet}: + if typ.kind in {tyObject, tyTuple, tyArray, tySet}: reprAux(result, p, typ, cl) else: var p = p |