Closed TinBryn closed 11 months ago
const
case objects are not supported. Unfortunately some code relies on the fact that Nim doesn't diagnose this and "happens" to work...
We should add support for them IMO.
@Clyybber Tried, IMO it's quite impossible when sticking to C89 and C++98.
This seems to be fixed on devel, need to add a test case?
yes please, with this template: https://github.com/timotheecour/Nim/issues/534#issuecomment-769565033
possibly under tests/misc/t12464.nim
or elsewhere
!nim c
type
Foo = object
case isFunc: bool
of false: nil
of true:
fun: proc(): int
const i = Foo(isFunc: false)
let j = i
93.26 Kb (95,496 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2023-11-20T14:36:51
2023-11-20T14:36:52
90.98 Kb (93,168 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2023-11-20T14:36:52
2023-11-20T14:36:53
90.98 Kb (93,168 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2023-11-20T14:36:53
2023-11-20T14:36:53
100.77 Kb (103,184 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
# define nimfr_(proc, file) \
TFrame FR_; \
FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = 0; nimFrame(&FR_);
# define nimfrs_(proc, file, slots, length) \
struct {TFrame* prev;NCSTRING procname;NI line;NCSTRING filename; NI len; VarSlot s[slots];} FR_; \
FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = length; nimFrame((TFrame*)&FR_);
# define nimln_(n, file) \
FR_.line = n; FR_.filename = file;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct tyTuple__JfHvHzMrhKkWAUvQKe0i1A tyTuple__JfHvHzMrhKkWAUvQKe0i1A;
typedef struct tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg;
typedef struct RootObj RootObj;
typedef struct {
N_NIMCALL_PTR(NI, ClP_0) (void* ClE_0);
void* ClE_0;
} tyProc__tgsNrU35ceaIgGiec9cpZng;
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {
NIM_BOOL isFunc;
union{
struct {tyProc__tgsNrU35ceaIgGiec9cpZng fun;
} _isFunc_2;
};
};
typedef NU8 tyEnum_TNimKind__3rC59cFdCULJbp2tHLSZMXQ;
typedef NU8 tySet_tyEnum_TNimTypeFlag__z9aX9aBGjlpDIC58y9bKcsmzA;
typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p);
struct TNimType {
NI size;
NI align;
tyEnum_TNimKind__3rC59cFdCULJbp2tHLSZMXQ kind;
tySet_tyEnum_TNimTypeFlag__z9aX9aBGjlpDIC58y9bKcsmzA flags;
TNimType* base;
TNimNode* node;
void* finalizer;
tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
typedef NU8 tyEnum_TNimNodeKind__XtzEyxd2A8uwMJcYYak9c7w;
struct TNimNode {
tyEnum_TNimNodeKind__XtzEyxd2A8uwMJcYYak9c7w kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct tyTuple__JfHvHzMrhKkWAUvQKe0i1A {
void* Field0;
tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg* Field1;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg {
RootObj Sup;
};
typedef N_NIMCALL_PTR(void, tyProc__T4eqaYlFJYZUv9aG9b1TV0bQ) (void);
static N_NIMCALL(void, Marker_tyRef__HsJiUUcO9cHBdUCi0HwkSTA)(void* p, NI op);
N_LIB_PRIVATE N_NIMCALL(void, nimGCvisit)(void* d, NI op);
static N_NIMCALL(void, TM__SRd76hP9cMfCzdUO857UhQQ_3)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimRegisterGlobalMarker)(tyProc__T4eqaYlFJYZUv9aG9b1TV0bQ markerProc);
N_LIB_PRIVATE N_NIMCALL(void, genericAssign)(void* dest, void* src, TNimType* mt);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_2997)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimType NTIfoo__DU1MGHNn9cEFbBHuJSQfqbw_;
extern TNimType NTIbool__VaVACK0bpYmqIQ0mKcHfQQ_;
TNimNode* NimDT___DU1MGHNn9cEFbBHuJSQfqbw_isFunc[3];
N_LIB_PRIVATE TNimType NTIprocLT58intLOclosureOT__tgsNrU35ceaIgGiec9cpZng_;
N_LIB_PRIVATE TNimType NTIpointer__vr5DoT1jILTGdRlYv1OYpw_;
extern TNimType NTIrootobj__ytyiCJqK439aF9cIibuRVpAg_;
N_LIB_PRIVATE TNimType NTIobject__diB2NTuAIWY0FO9c5IUJRGg_;
N_LIB_PRIVATE TNimType NTIrefobject__HsJiUUcO9cHBdUCi0HwkSTA_;
N_LIB_PRIVATE NIM_CONST tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw i__temp_5 = {NIM_FALSE, {}}
;
N_LIB_PRIVATE tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw j__temp_6;
extern TFrame* framePtr__system_2564;
extern TFrame* framePtr__system_2564;
extern TFrame* framePtr__system_2564;
extern TFrame* framePtr__system_2564;
extern TFrame* framePtr__system_2564;
extern TFrame* framePtr__system_2564;
static N_NIMCALL(void, Marker_tyRef__HsJiUUcO9cHBdUCi0HwkSTA)(void* p, NI op) {
tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg* a;
a = (tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg*)p;
}
static N_NIMCALL(void, TM__SRd76hP9cMfCzdUO857UhQQ_3)(void) {
switch (j__temp_6.isFunc) {
case NIM_FALSE:
break;
case NIM_TRUE:
nimGCvisit((void*)j__temp_6._isFunc_2.fun.ClE_0, 0);
break;
}
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
nimGC_setStackBottom(locals);
}
static N_INLINE(void, nimFrame)(TFrame* s) {
{
if (!(framePtr__system_2564 == ((TFrame*) NIM_NIL))) goto LA3_;
(*s).calldepth = ((NI16) 0);
}
goto LA1_;
LA3_: ;
{
(*s).calldepth = (NI16)((*framePtr__system_2564).calldepth + ((NI16) 1));
}
LA1_: ;
(*s).prev = framePtr__system_2564;
framePtr__system_2564 = s;
{
if (!((*s).calldepth == ((NI16) 2000))) goto LA8_;
callDepthLimitReached__system_2997();
}
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
framePtr__system_2564 = (*framePtr__system_2564).prev;
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
void (*volatile inner)(void);
inner = PreMainInner;
atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_DatInit000();
initStackBottomWith((void *)&inner);
atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_Init000();
atmtempdotnim_DatInit000();
(*inner)();
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
NimMainModule();
}
N_CDECL(void, NimMain)(void) {
void (*volatile inner)(void);
PreMain();
inner = NimMainInner;
initStackBottomWith((void *)&inner);
(*inner)();
}
int main(int argc, char** args, char** env) {
cmdLine = args;
cmdCount = argc;
gEnv = env;
NimMain();
return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
TFrame FR_; FR_.len = 0;
nimRegisterGlobalMarker(TM__SRd76hP9cMfCzdUO857UhQQ_3);
}
{
nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
genericAssign((void*)(&j__temp_6), (void*)(&i__temp_5), (&NTIfoo__DU1MGHNn9cEFbBHuJSQfqbw_));
popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
static TNimNode* TM__SRd76hP9cMfCzdUO857UhQQ_2_2[2];
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[7];
NTIfoo__DU1MGHNn9cEFbBHuJSQfqbw_.size = sizeof(tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw);
NTIfoo__DU1MGHNn9cEFbBHuJSQfqbw_.align = NIM_ALIGNOF(tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw);
NTIfoo__DU1MGHNn9cEFbBHuJSQfqbw_.kind = 18;
NTIfoo__DU1MGHNn9cEFbBHuJSQfqbw_.base = 0;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].kind = 3;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].offset = offsetof(tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw, isFunc);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].typ = (&NTIbool__VaVACK0bpYmqIQ0mKcHfQQ_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].name = "isFunc";
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].sons = &NimDT___DU1MGHNn9cEFbBHuJSQfqbw_isFunc[0];
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].len = 2;
TM__SRd76hP9cMfCzdUO857UhQQ_0[1].len = 0; TM__SRd76hP9cMfCzdUO857UhQQ_0[1].kind = 2;
NimDT___DU1MGHNn9cEFbBHuJSQfqbw_isFunc[0] = &TM__SRd76hP9cMfCzdUO857UhQQ_0[1];
NTIprocLT58intLOclosureOT__tgsNrU35ceaIgGiec9cpZng_.size = sizeof(tyTuple__JfHvHzMrhKkWAUvQKe0i1A);
NTIprocLT58intLOclosureOT__tgsNrU35ceaIgGiec9cpZng_.align = NIM_ALIGNOF(tyTuple__JfHvHzMrhKkWAUvQKe0i1A);
NTIprocLT58intLOclosureOT__tgsNrU35ceaIgGiec9cpZng_.kind = 18;
NTIprocLT58intLOclosureOT__tgsNrU35ceaIgGiec9cpZng_.base = 0;
TM__SRd76hP9cMfCzdUO857UhQQ_2_2[0] = &TM__SRd76hP9cMfCzdUO857UhQQ_0[4];
NTIpointer__vr5DoT1jILTGdRlYv1OYpw_.size = sizeof(void*);
NTIpointer__vr5DoT1jILTGdRlYv1OYpw_.align = NIM_ALIGNOF(void*);
NTIpointer__vr5DoT1jILTGdRlYv1OYpw_.kind = 26;
NTIpointer__vr5DoT1jILTGdRlYv1OYpw_.base = 0;
NTIpointer__vr5DoT1jILTGdRlYv1OYpw_.flags = 3;
TM__SRd76hP9cMfCzdUO857UhQQ_0[4].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[4].offset = offsetof(tyTuple__JfHvHzMrhKkWAUvQKe0i1A, Field0);
TM__SRd76hP9cMfCzdUO857UhQQ_0[4].typ = (&NTIpointer__vr5DoT1jILTGdRlYv1OYpw_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[4].name = "Field0";
TM__SRd76hP9cMfCzdUO857UhQQ_2_2[1] = &TM__SRd76hP9cMfCzdUO857UhQQ_0[5];
NTIobject__diB2NTuAIWY0FO9c5IUJRGg_.size = sizeof(tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg);
NTIobject__diB2NTuAIWY0FO9c5IUJRGg_.align = NIM_ALIGNOF(tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg);
NTIobject__diB2NTuAIWY0FO9c5IUJRGg_.kind = 17;
NTIobject__diB2NTuAIWY0FO9c5IUJRGg_.base = (&NTIrootobj__ytyiCJqK439aF9cIibuRVpAg_);
NTIobject__diB2NTuAIWY0FO9c5IUJRGg_.flags = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[6].len = 0; TM__SRd76hP9cMfCzdUO857UhQQ_0[6].kind = 2;
NTIobject__diB2NTuAIWY0FO9c5IUJRGg_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[6];
NTIrefobject__HsJiUUcO9cHBdUCi0HwkSTA_.size = sizeof(tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg*);
NTIrefobject__HsJiUUcO9cHBdUCi0HwkSTA_.align = NIM_ALIGNOF(tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg*);
NTIrefobject__HsJiUUcO9cHBdUCi0HwkSTA_.kind = 22;
NTIrefobject__HsJiUUcO9cHBdUCi0HwkSTA_.base = (&NTIobject__diB2NTuAIWY0FO9c5IUJRGg_);
NTIrefobject__HsJiUUcO9cHBdUCi0HwkSTA_.marker = Marker_tyRef__HsJiUUcO9cHBdUCi0HwkSTA;
TM__SRd76hP9cMfCzdUO857UhQQ_0[5].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[5].offset = offsetof(tyTuple__JfHvHzMrhKkWAUvQKe0i1A, Field1);
TM__SRd76hP9cMfCzdUO857UhQQ_0[5].typ = (&NTIrefobject__HsJiUUcO9cHBdUCi0HwkSTA_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[5].name = "Field1";
TM__SRd76hP9cMfCzdUO857UhQQ_0[3].len = 2; TM__SRd76hP9cMfCzdUO857UhQQ_0[3].kind = 2; TM__SRd76hP9cMfCzdUO857UhQQ_0[3].sons = &TM__SRd76hP9cMfCzdUO857UhQQ_2_2[0];
NTIprocLT58intLOclosureOT__tgsNrU35ceaIgGiec9cpZng_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[3];
TM__SRd76hP9cMfCzdUO857UhQQ_0[2].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[2].offset = offsetof(tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw, _isFunc_2.fun);
TM__SRd76hP9cMfCzdUO857UhQQ_0[2].typ = (&NTIprocLT58intLOclosureOT__tgsNrU35ceaIgGiec9cpZng_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[2].name = "fun";
NimDT___DU1MGHNn9cEFbBHuJSQfqbw_isFunc[1] = &TM__SRd76hP9cMfCzdUO857UhQQ_0[2];
NTIfoo__DU1MGHNn9cEFbBHuJSQfqbw_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[0];
}
```
2023-11-20T14:36:56
2023-11-20T14:36:56
96.65 Kb (98,968 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
# define nimfr_(proc, file) \
TFrame FR_; \
FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = 0; nimFrame(&FR_);
# define nimfrs_(proc, file, slots, length) \
struct {TFrame* prev;NCSTRING procname;NI line;NCSTRING filename; NI len; VarSlot s[slots];} FR_; \
FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = length; nimFrame((TFrame*)&FR_);
# define nimln_(n, file) \
FR_.line = n; FR_.filename = file;
typedef struct tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct tyTuple__JfHvHzMrhKkWAUvQKe0i1A tyTuple__JfHvHzMrhKkWAUvQKe0i1A;
typedef struct tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg;
typedef struct RootObj RootObj;
typedef struct {
N_NIMCALL_PTR(NI, ClP_0) (void* ClE_0);
void* ClE_0;
} tyProc__tgsNrU35ceaIgGiec9cpZng;
struct tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w {
NIM_BOOL isFunc;
union{
struct {tyProc__tgsNrU35ceaIgGiec9cpZng fun;
} _isFunc_2;
};
};
typedef NU8 tyEnum_TNimKind__jIBKr1ejBgsfM33Kxw4j7A;
typedef NU8 tySet_tyEnum_TNimTypeFlag__v8QUszD1sWlSIWZz7mC4bQ;
typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p);
struct TNimType {
NI size;
NI align;
tyEnum_TNimKind__jIBKr1ejBgsfM33Kxw4j7A kind;
tySet_tyEnum_TNimTypeFlag__v8QUszD1sWlSIWZz7mC4bQ flags;
TNimType* base;
TNimNode* node;
void* finalizer;
tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
typedef NU8 tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ;
struct TNimNode {
tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct tyTuple__JfHvHzMrhKkWAUvQKe0i1A {
void* Field0;
tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg* Field1;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg {
RootObj Sup;
};
typedef N_NIMCALL_PTR(void, tyProc__T4eqaYlFJYZUv9aG9b1TV0bQ) (void);
static N_NIMCALL(void, Marker_tyRef__HsJiUUcO9cHBdUCi0HwkSTA)(void* p, NI op);
N_LIB_PRIVATE N_NIMCALL(void, nimGCvisit)(void* d, NI op);
static N_NIMCALL(void, TM__SRd76hP9cMfCzdUO857UhQQ_3)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimRegisterGlobalMarker)(tyProc__T4eqaYlFJYZUv9aG9b1TV0bQ markerProc);
N_LIB_PRIVATE N_NIMCALL(void, genericAssign)(void* dest, void* src, TNimType* mt);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimType NTI__waNMdVW6mQEjLtse9c3kN2w_;
extern TNimType NTI__VaVACK0bpYmqIQ0mKcHfQQ_;
TNimNode* NimDT___waNMdVW6mQEjLtse9c3kN2w_isFunc[3];
N_LIB_PRIVATE TNimType NTI__tgsNrU35ceaIgGiec9cpZng_;
N_LIB_PRIVATE TNimType NTI__vr5DoT1jILTGdRlYv1OYpw_;
extern TNimType NTI__ytyiCJqK439aF9cIibuRVpAg_;
N_LIB_PRIVATE TNimType NTI__diB2NTuAIWY0FO9c5IUJRGg_;
N_LIB_PRIVATE TNimType NTI__HsJiUUcO9cHBdUCi0HwkSTA_;
N_LIB_PRIVATE NIM_CONST tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w i__Vuap9ai8jfbvRhF5w5oYzTw = {NIM_FALSE, {}}
;
N_LIB_PRIVATE tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w j__n4eBtOVinNhnxvlRG4QSjg;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
static N_NIMCALL(void, Marker_tyRef__HsJiUUcO9cHBdUCi0HwkSTA)(void* p, NI op) {
tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg* a;
a = (tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg*)p;
}
static N_NIMCALL(void, TM__SRd76hP9cMfCzdUO857UhQQ_3)(void) {
switch (j__n4eBtOVinNhnxvlRG4QSjg.isFunc) {
case NIM_FALSE:
break;
case NIM_TRUE:
nimGCvisit((void*)j__n4eBtOVinNhnxvlRG4QSjg._isFunc_2.fun.ClE_0, 0);
break;
}
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
nimGC_setStackBottom(locals);
}
static N_INLINE(void, nimFrame)(TFrame* s) {
{
if (!(framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw == ((TFrame*) NIM_NIL))) goto LA3_;
(*s).calldepth = ((NI16) 0);
}
goto LA1_;
LA3_: ;
{
(*s).calldepth = (NI16)((*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).calldepth + ((NI16) 1));
}
LA1_: ;
(*s).prev = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
{
if (!((*s).calldepth == ((NI16) 2000))) goto LA8_;
callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw();
}
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = (*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).prev;
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
void (*volatile inner)(void);
inner = PreMainInner;
systemDatInit000();
initStackBottomWith((void *)&inner);
systemInit000();
tempDatInit000();
(*inner)();
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
NimMainModule();
}
N_CDECL(void, NimMain)(void) {
void (*volatile inner)(void);
PreMain();
inner = NimMainInner;
initStackBottomWith((void *)&inner);
(*inner)();
}
int main(int argc, char** args, char** env) {
cmdLine = args;
cmdCount = argc;
gEnv = env;
NimMain();
return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
TFrame FR_; FR_.len = 0;
nimRegisterGlobalMarker(TM__SRd76hP9cMfCzdUO857UhQQ_3);
}
{
nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
genericAssign((void*)(&j__n4eBtOVinNhnxvlRG4QSjg), (void*)(&i__Vuap9ai8jfbvRhF5w5oYzTw), (&NTI__waNMdVW6mQEjLtse9c3kN2w_));
popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
static TNimNode* TM__SRd76hP9cMfCzdUO857UhQQ_2_2[2];
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[7];
NTI__waNMdVW6mQEjLtse9c3kN2w_.size = sizeof(tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w);
NTI__waNMdVW6mQEjLtse9c3kN2w_.align = NIM_ALIGNOF(tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w);
NTI__waNMdVW6mQEjLtse9c3kN2w_.kind = 18;
NTI__waNMdVW6mQEjLtse9c3kN2w_.base = 0;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].kind = 3;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].offset = offsetof(tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w, isFunc);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].typ = (&NTI__VaVACK0bpYmqIQ0mKcHfQQ_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].name = "isFunc";
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].sons = &NimDT___waNMdVW6mQEjLtse9c3kN2w_isFunc[0];
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].len = 2;
TM__SRd76hP9cMfCzdUO857UhQQ_0[1].len = 0; TM__SRd76hP9cMfCzdUO857UhQQ_0[1].kind = 2;
NimDT___waNMdVW6mQEjLtse9c3kN2w_isFunc[0] = &TM__SRd76hP9cMfCzdUO857UhQQ_0[1];
NTI__tgsNrU35ceaIgGiec9cpZng_.size = sizeof(tyTuple__JfHvHzMrhKkWAUvQKe0i1A);
NTI__tgsNrU35ceaIgGiec9cpZng_.align = NIM_ALIGNOF(tyTuple__JfHvHzMrhKkWAUvQKe0i1A);
NTI__tgsNrU35ceaIgGiec9cpZng_.kind = 18;
NTI__tgsNrU35ceaIgGiec9cpZng_.base = 0;
TM__SRd76hP9cMfCzdUO857UhQQ_2_2[0] = &TM__SRd76hP9cMfCzdUO857UhQQ_0[4];
NTI__vr5DoT1jILTGdRlYv1OYpw_.size = sizeof(void*);
NTI__vr5DoT1jILTGdRlYv1OYpw_.align = NIM_ALIGNOF(void*);
NTI__vr5DoT1jILTGdRlYv1OYpw_.kind = 26;
NTI__vr5DoT1jILTGdRlYv1OYpw_.base = 0;
NTI__vr5DoT1jILTGdRlYv1OYpw_.flags = 3;
TM__SRd76hP9cMfCzdUO857UhQQ_0[4].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[4].offset = offsetof(tyTuple__JfHvHzMrhKkWAUvQKe0i1A, Field0);
TM__SRd76hP9cMfCzdUO857UhQQ_0[4].typ = (&NTI__vr5DoT1jILTGdRlYv1OYpw_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[4].name = "Field0";
TM__SRd76hP9cMfCzdUO857UhQQ_2_2[1] = &TM__SRd76hP9cMfCzdUO857UhQQ_0[5];
NTI__diB2NTuAIWY0FO9c5IUJRGg_.size = sizeof(tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg);
NTI__diB2NTuAIWY0FO9c5IUJRGg_.align = NIM_ALIGNOF(tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg);
NTI__diB2NTuAIWY0FO9c5IUJRGg_.kind = 17;
NTI__diB2NTuAIWY0FO9c5IUJRGg_.base = (&NTI__ytyiCJqK439aF9cIibuRVpAg_);
NTI__diB2NTuAIWY0FO9c5IUJRGg_.flags = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[6].len = 0; TM__SRd76hP9cMfCzdUO857UhQQ_0[6].kind = 2;
NTI__diB2NTuAIWY0FO9c5IUJRGg_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[6];
NTI__HsJiUUcO9cHBdUCi0HwkSTA_.size = sizeof(tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg*);
NTI__HsJiUUcO9cHBdUCi0HwkSTA_.align = NIM_ALIGNOF(tyObject_Env_tempdotnim_Foo___diB2NTuAIWY0FO9c5IUJRGg*);
NTI__HsJiUUcO9cHBdUCi0HwkSTA_.kind = 22;
NTI__HsJiUUcO9cHBdUCi0HwkSTA_.base = (&NTI__diB2NTuAIWY0FO9c5IUJRGg_);
NTI__HsJiUUcO9cHBdUCi0HwkSTA_.marker = Marker_tyRef__HsJiUUcO9cHBdUCi0HwkSTA;
TM__SRd76hP9cMfCzdUO857UhQQ_0[5].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[5].offset = offsetof(tyTuple__JfHvHzMrhKkWAUvQKe0i1A, Field1);
TM__SRd76hP9cMfCzdUO857UhQQ_0[5].typ = (&NTI__HsJiUUcO9cHBdUCi0HwkSTA_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[5].name = "Field1";
TM__SRd76hP9cMfCzdUO857UhQQ_0[3].len = 2; TM__SRd76hP9cMfCzdUO857UhQQ_0[3].kind = 2; TM__SRd76hP9cMfCzdUO857UhQQ_0[3].sons = &TM__SRd76hP9cMfCzdUO857UhQQ_2_2[0];
NTI__tgsNrU35ceaIgGiec9cpZng_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[3];
TM__SRd76hP9cMfCzdUO857UhQQ_0[2].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[2].offset = offsetof(tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w, _isFunc_2.fun);
TM__SRd76hP9cMfCzdUO857UhQQ_0[2].typ = (&NTI__tgsNrU35ceaIgGiec9cpZng_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[2].name = "fun";
NimDT___waNMdVW6mQEjLtse9c3kN2w_isFunc[1] = &TM__SRd76hP9cMfCzdUO857UhQQ_0[2];
NTI__waNMdVW6mQEjLtse9c3kN2w_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[0];
}
```
2023-11-20T14:36:58
2023-11-20T14:36:58
96.38 Kb (98,688 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
# define nimfr_(proc, file) \
TFrame FR_; \
FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = 0; nimFrame(&FR_);
# define nimfrs_(proc, file, slots, length) \
struct {TFrame* prev;NCSTRING procname;NI line;NCSTRING filename; NI len; VarSlot s[slots];} FR_; \
FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = length; nimFrame((TFrame*)&FR_);
# define nimln_(n, file) \
FR_.line = n; FR_.filename = file;
typedef struct tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct tyTuple__JfHvHzMrhKkWAUvQKe0i1A tyTuple__JfHvHzMrhKkWAUvQKe0i1A;
typedef struct tyObject_Env_tempdotnim___diB2NTuAIWY0FO9c5IUJRGg tyObject_Env_tempdotnim___diB2NTuAIWY0FO9c5IUJRGg;
typedef struct RootObj RootObj;
typedef struct {
N_NIMCALL_PTR(NI, ClP_0) (void* ClE_0);
void* ClE_0;
} tyProc__1vaGAONPAWaeByqm8WA9cTw;
struct tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w {
NIM_BOOL isFunc;
union{
struct {tyProc__1vaGAONPAWaeByqm8WA9cTw fun;
} _isFunc_2;
};
};
typedef NU8 tyEnum_TNimKind__jIBKr1ejBgsfM33Kxw4j7A;
typedef NU8 tySet_tyEnum_TNimTypeFlag__v8QUszD1sWlSIWZz7mC4bQ;
typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p);
struct TNimType {
NI size;
tyEnum_TNimKind__jIBKr1ejBgsfM33Kxw4j7A kind;
tySet_tyEnum_TNimTypeFlag__v8QUszD1sWlSIWZz7mC4bQ flags;
TNimType* base;
TNimNode* node;
void* finalizer;
tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
typedef NU8 tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ;
struct TNimNode {
tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct tyTuple__JfHvHzMrhKkWAUvQKe0i1A {
void* Field0;
tyObject_Env_tempdotnim___diB2NTuAIWY0FO9c5IUJRGg* Field1;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_Env_tempdotnim___diB2NTuAIWY0FO9c5IUJRGg {
RootObj Sup;
};
typedef N_NIMCALL_PTR(void, tyProc__T4eqaYlFJYZUv9aG9b1TV0bQ) (void);
static N_NIMCALL(void, Marker_tyRef__HsJiUUcO9cHBdUCi0HwkSTA)(void* p, NI op);
N_LIB_PRIVATE N_NIMCALL(void, nimGCvisit)(void* d, NI op);
static N_NIMCALL(void, TM__SRd76hP9cMfCzdUO857UhQQ_3)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimRegisterGlobalMarker)(tyProc__T4eqaYlFJYZUv9aG9b1TV0bQ markerProc);
N_LIB_PRIVATE N_NIMCALL(void, genericAssign)(void* dest, void* src, TNimType* mt);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimType NTI__waNMdVW6mQEjLtse9c3kN2w_;
extern TNimType NTI__VaVACK0bpYmqIQ0mKcHfQQ_;
TNimNode* NimDT___waNMdVW6mQEjLtse9c3kN2w_isFunc[3];
N_LIB_PRIVATE TNimType NTI__1vaGAONPAWaeByqm8WA9cTw_;
N_LIB_PRIVATE TNimType NTI__vr5DoT1jILTGdRlYv1OYpw_;
extern TNimType NTI__ytyiCJqK439aF9cIibuRVpAg_;
N_LIB_PRIVATE TNimType NTI__diB2NTuAIWY0FO9c5IUJRGg_;
N_LIB_PRIVATE TNimType NTI__HsJiUUcO9cHBdUCi0HwkSTA_;
N_LIB_PRIVATE NIM_CONST tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w i__Vuap9ai8jfbvRhF5w5oYzTw = {NIM_FALSE, {}}
;
N_LIB_PRIVATE tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w j__n4eBtOVinNhnxvlRG4QSjg;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
static N_NIMCALL(void, Marker_tyRef__HsJiUUcO9cHBdUCi0HwkSTA)(void* p, NI op) {
tyObject_Env_tempdotnim___diB2NTuAIWY0FO9c5IUJRGg* a;
a = (tyObject_Env_tempdotnim___diB2NTuAIWY0FO9c5IUJRGg*)p;
}
static N_NIMCALL(void, TM__SRd76hP9cMfCzdUO857UhQQ_3)(void) {
switch (j__n4eBtOVinNhnxvlRG4QSjg.isFunc) {
case NIM_FALSE:
break;
case NIM_TRUE:
nimGCvisit((void*)j__n4eBtOVinNhnxvlRG4QSjg._isFunc_2.fun.ClE_0, 0);
break;
}
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
nimGC_setStackBottom(locals);
}
static N_INLINE(void, nimFrame)(TFrame* s) {
{
if (!(framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw == NIM_NIL)) goto LA3_;
(*s).calldepth = ((NI16) 0);
}
goto LA1_;
LA3_: ;
{
(*s).calldepth = (NI16)((*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).calldepth + ((NI16) 1));
}
LA1_: ;
(*s).prev = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
{
if (!((*s).calldepth == ((NI16) (((NI) 2000))))) goto LA8_;
callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw();
}
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = (*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).prev;
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
void (*volatile inner)(void);
inner = PreMainInner;
systemDatInit000();
initStackBottomWith((void *)&inner);
systemInit000();
tempDatInit000();
(*inner)();
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
NimMainModule();
}
N_CDECL(void, NimMain)(void) {
void (*volatile inner)(void);
PreMain();
inner = NimMainInner;
initStackBottomWith((void *)&inner);
(*inner)();
}
int main(int argc, char** args, char** env) {
cmdLine = args;
cmdCount = argc;
gEnv = env;
NimMain();
return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
TFrame FR_; FR_.len = 0;
nimRegisterGlobalMarker(TM__SRd76hP9cMfCzdUO857UhQQ_3);
}
{
nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
genericAssign((void*)(&j__n4eBtOVinNhnxvlRG4QSjg), (void*)(&i__Vuap9ai8jfbvRhF5w5oYzTw), (&NTI__waNMdVW6mQEjLtse9c3kN2w_));
popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
static TNimNode* TM__SRd76hP9cMfCzdUO857UhQQ_2_2[2];
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[7];
NTI__waNMdVW6mQEjLtse9c3kN2w_.size = sizeof(tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w);
NTI__waNMdVW6mQEjLtse9c3kN2w_.kind = 18;
NTI__waNMdVW6mQEjLtse9c3kN2w_.base = 0;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].kind = 3;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].offset = offsetof(tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w, isFunc);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].typ = (&NTI__VaVACK0bpYmqIQ0mKcHfQQ_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].name = "isFunc";
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].sons = &NimDT___waNMdVW6mQEjLtse9c3kN2w_isFunc[0];
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].len = 2;
TM__SRd76hP9cMfCzdUO857UhQQ_0[1].len = 0; TM__SRd76hP9cMfCzdUO857UhQQ_0[1].kind = 2;
NimDT___waNMdVW6mQEjLtse9c3kN2w_isFunc[0] = &TM__SRd76hP9cMfCzdUO857UhQQ_0[1];
NTI__1vaGAONPAWaeByqm8WA9cTw_.size = sizeof(tyTuple__JfHvHzMrhKkWAUvQKe0i1A);
NTI__1vaGAONPAWaeByqm8WA9cTw_.kind = 18;
NTI__1vaGAONPAWaeByqm8WA9cTw_.base = 0;
TM__SRd76hP9cMfCzdUO857UhQQ_2_2[0] = &TM__SRd76hP9cMfCzdUO857UhQQ_0[4];
NTI__vr5DoT1jILTGdRlYv1OYpw_.size = sizeof(void*);
NTI__vr5DoT1jILTGdRlYv1OYpw_.kind = 26;
NTI__vr5DoT1jILTGdRlYv1OYpw_.base = 0;
NTI__vr5DoT1jILTGdRlYv1OYpw_.flags = 3;
TM__SRd76hP9cMfCzdUO857UhQQ_0[4].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[4].offset = offsetof(tyTuple__JfHvHzMrhKkWAUvQKe0i1A, Field0);
TM__SRd76hP9cMfCzdUO857UhQQ_0[4].typ = (&NTI__vr5DoT1jILTGdRlYv1OYpw_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[4].name = "Field0";
TM__SRd76hP9cMfCzdUO857UhQQ_2_2[1] = &TM__SRd76hP9cMfCzdUO857UhQQ_0[5];
NTI__diB2NTuAIWY0FO9c5IUJRGg_.size = sizeof(tyObject_Env_tempdotnim___diB2NTuAIWY0FO9c5IUJRGg);
NTI__diB2NTuAIWY0FO9c5IUJRGg_.kind = 17;
NTI__diB2NTuAIWY0FO9c5IUJRGg_.base = (&NTI__ytyiCJqK439aF9cIibuRVpAg_);
NTI__diB2NTuAIWY0FO9c5IUJRGg_.flags = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[6].len = 0; TM__SRd76hP9cMfCzdUO857UhQQ_0[6].kind = 2;
NTI__diB2NTuAIWY0FO9c5IUJRGg_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[6];
NTI__HsJiUUcO9cHBdUCi0HwkSTA_.size = sizeof(tyObject_Env_tempdotnim___diB2NTuAIWY0FO9c5IUJRGg*);
NTI__HsJiUUcO9cHBdUCi0HwkSTA_.kind = 22;
NTI__HsJiUUcO9cHBdUCi0HwkSTA_.base = (&NTI__diB2NTuAIWY0FO9c5IUJRGg_);
NTI__HsJiUUcO9cHBdUCi0HwkSTA_.marker = Marker_tyRef__HsJiUUcO9cHBdUCi0HwkSTA;
TM__SRd76hP9cMfCzdUO857UhQQ_0[5].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[5].offset = offsetof(tyTuple__JfHvHzMrhKkWAUvQKe0i1A, Field1);
TM__SRd76hP9cMfCzdUO857UhQQ_0[5].typ = (&NTI__HsJiUUcO9cHBdUCi0HwkSTA_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[5].name = "Field1";
TM__SRd76hP9cMfCzdUO857UhQQ_0[3].len = 2; TM__SRd76hP9cMfCzdUO857UhQQ_0[3].kind = 2; TM__SRd76hP9cMfCzdUO857UhQQ_0[3].sons = &TM__SRd76hP9cMfCzdUO857UhQQ_2_2[0];
NTI__1vaGAONPAWaeByqm8WA9cTw_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[3];
TM__SRd76hP9cMfCzdUO857UhQQ_0[2].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[2].offset = offsetof(tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w, _isFunc_2.fun);
TM__SRd76hP9cMfCzdUO857UhQQ_0[2].typ = (&NTI__1vaGAONPAWaeByqm8WA9cTw_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[2].name = "fun";
NimDT___waNMdVW6mQEjLtse9c3kN2w_isFunc[1] = &TM__SRd76hP9cMfCzdUO857UhQQ_0[2];
NTI__waNMdVW6mQEjLtse9c3kN2w_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[0];
}
```
2023-11-20T14:37:00
2023-11-20T14:37:01
96.38 Kb (98,688 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2023-11-20T14:37:02
2023-11-20T14:37:03
11.4.0
14.0.0
18.2
2023-11-20T14:36:21Z
6
nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
:robot: Bug found in 41 minutes
bisecting 302
commits at 7
commits per second
I have a variant type (case on discriminant) and one of the variants contains a proc type. There are a few cases where I have specific values (these variants don't contain procs) that are known at compile time so I want them to be declared
const
. When both of those conditions are met, as assignment from a const value results in a compiler failure from C, not from nim.Example
Current Output
gcc fails to compile
Expected Output
program should compile
Possible Solution
declaring the values
let
results in correct compilation, but ideally nim shouldn't produce incorrect C code without diagnostics, as the generated code is difficult to diagnose.Additional Information