Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

When move meets sink, = sink hook function is not called #23584

Closed
haoyu234 opened this issue May 8, 2024 · 4 comments
Closed

When move meets sink, = sink hook function is not called #23584

haoyu234 opened this issue May 8, 2024 · 4 comments

Comments

@haoyu234
Copy link
Contributor

haoyu234 commented May 8, 2024

Description

https://play.nim-lang.org/#pasty=mAoFregmBars

As mentioned in the document, = sink hooks are not always called, so I apparently call the move function.

When the sink and move are combined, the sink hook function is not called. In the use case below, the value of the pointer P is not updated correctly.

type
  Obj = object
    n: int
    p: ptr int

proc `$`*(p: pointer): string =
  $cast[uint](p)

proc `$`*[T](p: ptr T): string =
  $cast[uint](p)

proc `=sink`*(dest: var Obj; source: Obj) =
  echo "sink"
  dest.n = source.n
  
  # Always point to my own 'n' field
  dest.p = dest.n.addr

proc `=dup`*(a: Obj): Obj {.nodestroy.} =
  echo "dup"
  
var oldV = Obj(n: 1)
 
proc decodeN(newV: sink Obj) =
  echo "new p: ", cast[uint](newV.p)
  echo "old value: ", oldV
  echo "new value: ", newV
  
  assert newV.p == newV.n.addr

oldV.p = oldV.n.addr

echo "old p: ", cast[uint](oldV.p)

# The custom of '= sink' and '= dup' hooks were not called,
# causing the P pointer to point to the wrong position.
# After observation, I noticed that it still refers to the fields of the previous object,
# and the previous object seems to have been reset
decodeN(move oldV)

Nim Version

Nim Compiler Version 2.1.1 [Linux: amd64]
Compiled at 2024-05-05
Copyright (c) 2006-2024 by Andreas Rumpf

git hash: 1ef4d04
active boot switches: -d:release

Current Output

old p: 94912252015008
new p: 94912252015008
old value: (n: 0, p: nil)
new value: (n: 1, p: 94912252015008)
/usercode/in.nim(40)     in
/usercode/in.nim(30)     decodeN
/playground/nim/lib/std/assertions.nim(41) failedAssertImpl
/playground/nim/lib/std/assertions.nim(36) raiseAssert
/playground/nim/lib/system/fatal.nim(53) sysFatal
Error: unhandled exception: /usercode/in.nim(30, 3) `newV.p == newV.n.addr`  [AssertionDefect]

Expected Output

no assert, `= sink` hook function should be called

Possible Solution

No response

Additional Information

No response

@juancarlospaco
Copy link
Collaborator

!nim c

type
  Obj = object
    n: int
    p: ptr int

proc `$`*(p: pointer): string =
  $cast[uint](p)

proc `$`*[T](p: ptr T): string =
  $cast[uint](p)

proc `=sink`*(dest: var Obj; source: Obj) =
  echo "sink"
  dest.n = source.n
  dest.p = dest.n.addr

proc `=dup`*(a: Obj): Obj {.nodestroy.} =
  echo "dup"
  
var oldV = Obj(n: 1)
 
proc decodeN(newV: sink Obj) =
  echo "new p: ", cast[uint](newV.p)
  echo "old value: ", oldV
  echo "new value: ", newV
  doAssert newV.p == newV.n.addr

oldV.p = oldV.n.addr
echo "old p: ", cast[uint](oldV.p)
decodeN(move oldV)

Copy link
Contributor

github-actions bot commented May 8, 2024

🐧 Linux bisect by @juancarlospaco (collaborator)
devel 👎 FAIL

Output

Error: Command failed: 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
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/work/Nim/Nim/temp.nim decodeN
/home/runner/.choosenim/toolchains/nim-#devel/lib/std/assertions.nim failedAssertImpl
/home/runner/.choosenim/toolchains/nim-#devel/lib/std/assertions.nim raiseAssert
/home/runner/.choosenim/toolchains/nim-#devel/lib/system/fatal.nim sysFatal
Error: unhandled exception: /home/runner/work/Nim/Nim/temp.nim(20, 3) `newV.p == newV.n.addr`  [AssertionDefect]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp'
assertions.nim(34)       raiseAssert
Error: unhandled exception: errGenerated [AssertionDefect]

IR

Compiled filesize 99.65 Kb (102,040 bytes)
#define NIM_INTBITS 64
#include "nimbase.h"
#include <string.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) \
 FR_.line = n;
#define nimlf_(n, file) \
 FR_.line = n; FR_.filename = file;
typedef struct tyObject_Obj__3QyuY1yTGznZdLpU6vgCog tyObject_Obj__3QyuY1yTGznZdLpU6vgCog;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct tyObject_Obj__3QyuY1yTGznZdLpU6vgCog {
 NI n;
 NI* p;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__Re75IspeoxXy2oCZHwcRrA[2];
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___systemZdollars_u14)(NU64 x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
N_LIB_PRIVATE N_NIMCALL(void, decodeN__temp_u37)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog newV_p0);
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u95)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog x_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4555)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__stdZassertions_u235)(NimStringV2 msg_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u207)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqwasMoved___temp_u204)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
static const struct {
NI cap; NIM_CHAR data[7+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_2 = { 7 | NIM_STRLIT_FLAG, "old p: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_3 = {7, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_2};
static const struct {
NI cap; NIM_CHAR data[7+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 7 | NIM_STRLIT_FLAG, "new p: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_5 = {7, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4};
static const struct {
NI cap; NIM_CHAR data[11+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_6 = { 11 | NIM_STRLIT_FLAG, "old value: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_7 = {11, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_6};
static const struct {
NI cap; NIM_CHAR data[11+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_8 = { 11 | NIM_STRLIT_FLAG, "new value: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_9 = {11, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_8};
static const struct {
NI cap; NIM_CHAR data[66+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_10 = { 66 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(20, 3) `newV.p == newV.n.addr` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_11 = {66, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_10};
N_LIB_PRIVATE tyObject_Obj__3QyuY1yTGznZdLpU6vgCog oldV__temp_u36;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4339;
extern NIM_THREADVAR TFrame* framePtr__system_u2654;
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2) {
 void* T1_;
 T1_ = (void*)0;
 T1_ = memset(a_p0, v_p1, ((size_t) (size_p2)));
}
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {
 NIM_BOOL* result;
 result = (&nimInErrorMode__system_u4339);
 return result;
}
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 nimSetMem__systemZmemory_u7(p_p0, ((int)0), size_p1);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u2654 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u2654).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u2654;
 framePtr__system_u2654 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u4555();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u2654 = (*framePtr__system_u2654).prev;
}
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u148)(NI* p_p0) {
 NimStringV2 result;
NIM_BOOL* nimErr_;
 nimfr_("$", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 result = dollar___systemZdollars_u14(((NU64) (((NU) (ptrdiff_t) (p_p0)))));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
 return result;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u207)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0) {
}
N_LIB_PRIVATE N_NIMCALL(void, decodeN__temp_u37)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog newV_p0) {
 NimStringV2 colontmpD_;
 NimStringV2 colontmpD__2;
 NimStringV2 colontmpD__3;
 tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T3_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T4_;
NIM_BOOL* nimErr_;
 nimfr_("decodeN", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
 colontmpD__2.len = 0; colontmpD__2.p = NIM_NIL;
 colontmpD__3.len = 0; colontmpD__3.p = NIM_NIL;
 T2_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_5;
 colontmpD_ = dollar___systemZdollars_u14(((NU64) (((NU) (ptrdiff_t) (newV_p0.p)))));
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T2_[1] = colontmpD_;
 echoBinSafe(T2_, 2);
 T3_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_7;
 colontmpD__2 = dollar___temp_u95(oldV__temp_u36);
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T3_[1] = colontmpD__2;
 echoBinSafe(T3_, 2);
 T4_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_9;
 colontmpD__3 = dollar___temp_u95(newV_p0);
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T4_[1] = colontmpD__3;
 echoBinSafe(T4_, 2);
 {
  if (!!((newV_p0.p == (&newV_p0.n)))) goto LA7_;
  failedAssertImpl__stdZassertions_u235(TM__SRd76hP9cMfCzdUO857UhQQ_11);
  if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 }
LA7_: ;
 {
  LA1_:;
 }
 {
  eqdestroy___temp_u207((&newV_p0));
  if (colontmpD__3.p && !(colontmpD__3.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD__3.p);
}
  if (colontmpD__2.p && !(colontmpD__2.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD__2.p);
}
  if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, eqwasMoved___temp_u204)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0) {
 (*dest_p0).n = 0;
 (*dest_p0).p = 0;
}
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) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000();
 PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 0
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 (*inner)();
#else
 PreMain();
 NimMainInner();
#endif
}
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) {
{
 NimStringV2 colontmpD_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
 tyObject_Obj__3QyuY1yTGznZdLpU6vgCog T3_;
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
 nimZeroMem((void*)(&oldV__temp_u36), sizeof(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog));
 oldV__temp_u36.n = ((NI)1);
 oldV__temp_u36.p = (&oldV__temp_u36.n);
 T2_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_3;
 colontmpD_ = dollar___systemZdollars_u14(((NU64) (((NU) (ptrdiff_t) (oldV__temp_u36.p)))));
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T2_[1] = colontmpD_;
 echoBinSafe(T2_, 2);
 T3_ = oldV__temp_u36;
 eqwasMoved___temp_u204((&oldV__temp_u36));
 decodeN__temp_u37(T3_);
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 {
  LA1_:;
 }
 {
  if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 eqdestroy___temp_u207((&oldV__temp_u36));
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-05-08T11:13:06
  • Finished 2024-05-08T11:13:06
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Obj"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            newIdentNode("int"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("p"),
            nnkPtrTy.newTree(
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("pointer"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("T"),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        nnkPtrTy.newTree(
          newIdentNode("T")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("sink")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("dest"),
        nnkVarTy.newTree(
          newIdentNode("Obj")
        ),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("source"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("sink")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("n")
        ),
        nnkDotExpr.newTree(
          newIdentNode("source"),
          newIdentNode("n")
        )
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("p")
        ),
        nnkDotExpr.newTree(
          nnkDotExpr.newTree(
            newIdentNode("dest"),
            newIdentNode("n")
          ),
          newIdentNode("addr")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("dup")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Obj"),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    nnkPragma.newTree(
      newIdentNode("nodestroy")
    ),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("dup")
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("oldV"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Obj"),
        nnkExprColonExpr.newTree(
          newIdentNode("n"),
          newLit(1)
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("decodeN"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("newV"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("Obj")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new p: "),
        nnkCast.newTree(
          newIdentNode("uint"),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("old value: "),
        newIdentNode("oldV")
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new value: "),
        newIdentNode("newV")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          ),
          nnkDotExpr.newTree(
            nnkDotExpr.newTree(
              newIdentNode("newV"),
              newIdentNode("n")
            ),
            newIdentNode("addr")
          )
        )
      )
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("oldV"),
      newIdentNode("p")
    ),
    nnkDotExpr.newTree(
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("n")
      ),
      newIdentNode("addr")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    newLit("old p: "),
    nnkCast.newTree(
      newIdentNode("uint"),
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("p")
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("decodeN"),
    nnkCommand.newTree(
      newIdentNode("move"),
      newIdentNode("oldV")
    )
  )
)
stable 👎 FAIL

Output

Error: Command failed: 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
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/work/Nim/Nim/temp.nim decodeN
/home/runner/.choosenim/toolchains/nim-2.0.4/lib/std/assertions.nim failedAssertImpl
/home/runner/.choosenim/toolchains/nim-2.0.4/lib/std/assertions.nim raiseAssert
/home/runner/.choosenim/toolchains/nim-2.0.4/lib/system/fatal.nim sysFatal
Error: unhandled exception: /home/runner/work/Nim/Nim/temp.nim(20, 3) `newV.p == newV.n.addr`  [AssertionDefect]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp'
assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(681, 5) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 97.67 Kb (100,016 bytes)
#define NIM_INTBITS 64
#include "nimbase.h"
#include <string.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) \
 FR_.line = n;
#define nimlf_(n, file) \
 FR_.line = n; FR_.filename = file;
typedef struct tyObject_Obj__3QyuY1yTGznZdLpU6vgCog tyObject_Obj__3QyuY1yTGznZdLpU6vgCog;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct tyObject_Obj__3QyuY1yTGznZdLpU6vgCog {
 NI n;
 NI* p;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__Re75IspeoxXy2oCZHwcRrA[2];
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___systemZdollars_u14)(NU64 x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
N_LIB_PRIVATE N_NIMCALL(void, decodeN__temp_u18)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog newV_p0);
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u78)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog x_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4621)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__stdZassertions_u310)(NimStringV2 msg_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u192)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqwasMoved___temp_u189)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
static const struct {
NI cap; NIM_CHAR data[7+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_2 = { 7 | NIM_STRLIT_FLAG, "old p: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_3 = {7, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_2};
static const struct {
NI cap; NIM_CHAR data[7+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 7 | NIM_STRLIT_FLAG, "new p: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_5 = {7, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4};
static const struct {
NI cap; NIM_CHAR data[11+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_6 = { 11 | NIM_STRLIT_FLAG, "old value: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_7 = {11, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_6};
static const struct {
NI cap; NIM_CHAR data[11+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_8 = { 11 | NIM_STRLIT_FLAG, "new value: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_9 = {11, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_8};
static const struct {
NI cap; NIM_CHAR data[66+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_10 = { 66 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(20, 3) `newV.p == newV.n.addr` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_11 = {66, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_10};
N_LIB_PRIVATE tyObject_Obj__3QyuY1yTGznZdLpU6vgCog oldV__temp_u17;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4403;
extern NIM_THREADVAR TFrame* framePtr__system_u4020;
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2) {
 void* T1_;
 T1_ = (void*)0;
 T1_ = memset(a_p0, v_p1, ((size_t) (size_p2)));
}
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {
 NIM_BOOL* result;
 result = (&nimInErrorMode__system_u4403);
 return result;
}
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 nimSetMem__systemZmemory_u7(p_p0, ((int)0), size_p1);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u4020 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u4020).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u4020;
 framePtr__system_u4020 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u4621();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u4020 = (*framePtr__system_u4020).prev;
}
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u133)(NI* p_p0) {
 NimStringV2 result;
NIM_BOOL* nimErr_;
 nimfr_("$", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 result = dollar___systemZdollars_u14(((NU64) (((NU) (ptrdiff_t) (p_p0)))));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
 return result;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u192)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0) {
}
N_LIB_PRIVATE N_NIMCALL(void, decodeN__temp_u18)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog newV_p0) {
 NimStringV2 colontmpD_;
 NimStringV2 colontmpD__2;
 NimStringV2 colontmpD__3;
 tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T3_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T4_;
NIM_BOOL* nimErr_;
 nimfr_("decodeN", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
 colontmpD__2.len = 0; colontmpD__2.p = NIM_NIL;
 colontmpD__3.len = 0; colontmpD__3.p = NIM_NIL;
 T2_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_5;
 colontmpD_ = dollar___systemZdollars_u14(((NU64) (((NU) (ptrdiff_t) (newV_p0.p)))));
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T2_[1] = colontmpD_;
 echoBinSafe(T2_, 2);
 T3_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_7;
 colontmpD__2 = dollar___temp_u78(oldV__temp_u17);
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T3_[1] = colontmpD__2;
 echoBinSafe(T3_, 2);
 T4_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_9;
 colontmpD__3 = dollar___temp_u78(newV_p0);
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T4_[1] = colontmpD__3;
 echoBinSafe(T4_, 2);
 {
  if (!!((newV_p0.p == (&newV_p0.n)))) goto LA7_;
  failedAssertImpl__stdZassertions_u310(TM__SRd76hP9cMfCzdUO857UhQQ_11);
  if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 }
LA7_: ;
 {
  LA1_:;
 }
 {
  eqdestroy___temp_u192((&newV_p0));
  if (colontmpD__3.p && !(colontmpD__3.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD__3.p);
}
  if (colontmpD__2.p && !(colontmpD__2.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD__2.p);
}
  if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, eqwasMoved___temp_u189)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0) {
 (*dest_p0).n = 0;
 (*dest_p0).p = 0;
}
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) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000();
 PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 0
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 (*inner)();
#else
 PreMain();
 NimMainInner();
#endif
}
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) {
{
 NimStringV2 colontmpD_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
 tyObject_Obj__3QyuY1yTGznZdLpU6vgCog T3_;
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
 nimZeroMem((void*)(&oldV__temp_u17), sizeof(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog));
 oldV__temp_u17.n = ((NI)1);
 oldV__temp_u17.p = (&oldV__temp_u17.n);
 T2_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_3;
 colontmpD_ = dollar___systemZdollars_u14(((NU64) (((NU) (ptrdiff_t) (oldV__temp_u17.p)))));
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T2_[1] = colontmpD_;
 echoBinSafe(T2_, 2);
 T3_ = oldV__temp_u17;
 eqwasMoved___temp_u189((&oldV__temp_u17));
 decodeN__temp_u18(T3_);
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 {
  LA1_:;
 }
 {
  if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 eqdestroy___temp_u192((&oldV__temp_u17));
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-05-08T11:13:07
  • Finished 2024-05-08T11:13:07
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Obj"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            newIdentNode("int"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("p"),
            nnkPtrTy.newTree(
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("pointer"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("T"),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        nnkPtrTy.newTree(
          newIdentNode("T")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("sink")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("dest"),
        nnkVarTy.newTree(
          newIdentNode("Obj")
        ),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("source"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("sink")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("n")
        ),
        nnkDotExpr.newTree(
          newIdentNode("source"),
          newIdentNode("n")
        )
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("p")
        ),
        nnkDotExpr.newTree(
          nnkDotExpr.newTree(
            newIdentNode("dest"),
            newIdentNode("n")
          ),
          newIdentNode("addr")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("dup")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Obj"),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    nnkPragma.newTree(
      newIdentNode("nodestroy")
    ),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("dup")
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("oldV"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Obj"),
        nnkExprColonExpr.newTree(
          newIdentNode("n"),
          newLit(1)
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("decodeN"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("newV"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("Obj")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new p: "),
        nnkCast.newTree(
          newIdentNode("uint"),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("old value: "),
        newIdentNode("oldV")
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new value: "),
        newIdentNode("newV")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          ),
          nnkDotExpr.newTree(
            nnkDotExpr.newTree(
              newIdentNode("newV"),
              newIdentNode("n")
            ),
            newIdentNode("addr")
          )
        )
      )
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("oldV"),
      newIdentNode("p")
    ),
    nnkDotExpr.newTree(
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("n")
      ),
      newIdentNode("addr")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    newLit("old p: "),
    nnkCast.newTree(
      newIdentNode("uint"),
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("p")
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("decodeN"),
    nnkCommand.newTree(
      newIdentNode("move"),
      newIdentNode("oldV")
    )
  )
)
2.0.2 👎 FAIL

Output

Error: Command failed: 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
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/work/Nim/Nim/temp.nim decodeN
/home/runner/.choosenim/toolchains/nim-2.0.2/lib/std/assertions.nim failedAssertImpl
/home/runner/.choosenim/toolchains/nim-2.0.2/lib/std/assertions.nim raiseAssert
/home/runner/.choosenim/toolchains/nim-2.0.2/lib/system/fatal.nim sysFatal
Error: unhandled exception: /home/runner/work/Nim/Nim/temp.nim(20, 3) `newV.p == newV.n.addr`  [AssertionDefect]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp'
assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(681, 5) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 97.68 Kb (100,024 bytes)
#define NIM_INTBITS 64
#include "nimbase.h"
#include <string.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) \
 FR_.line = n;
#define nimlf_(n, file) \
 FR_.line = n; FR_.filename = file;
typedef struct tyObject_Obj__3QyuY1yTGznZdLpU6vgCog tyObject_Obj__3QyuY1yTGznZdLpU6vgCog;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct tyObject_Obj__3QyuY1yTGznZdLpU6vgCog {
 NI n;
 NI* p;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__Re75IspeoxXy2oCZHwcRrA[2];
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___systemZdollars_u14)(NU64 x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
N_LIB_PRIVATE N_NIMCALL(void, decodeN__temp_u18)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog newV_p0);
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u78)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog x_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4621)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__stdZassertions_u310)(NimStringV2 msg_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u192)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqwasMoved___temp_u189)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
static const struct {
NI cap; NIM_CHAR data[7+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_2 = { 7 | NIM_STRLIT_FLAG, "old p: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_3 = {7, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_2};
static const struct {
NI cap; NIM_CHAR data[7+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 7 | NIM_STRLIT_FLAG, "new p: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_5 = {7, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4};
static const struct {
NI cap; NIM_CHAR data[11+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_6 = { 11 | NIM_STRLIT_FLAG, "old value: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_7 = {11, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_6};
static const struct {
NI cap; NIM_CHAR data[11+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_8 = { 11 | NIM_STRLIT_FLAG, "new value: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_9 = {11, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_8};
static const struct {
NI cap; NIM_CHAR data[66+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_10 = { 66 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(20, 3) `newV.p == newV.n.addr` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_11 = {66, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_10};
N_LIB_PRIVATE tyObject_Obj__3QyuY1yTGznZdLpU6vgCog oldV__temp_u17;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4403;
extern NIM_THREADVAR TFrame* framePtr__system_u4020;
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2) {
 void* T1_;
 T1_ = (void*)0;
 T1_ = memset(a_p0, v_p1, ((size_t) (size_p2)));
}
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {
 NIM_BOOL* result;
 result = (&nimInErrorMode__system_u4403);
 return result;
}
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 nimSetMem__systemZmemory_u7(p_p0, ((int)0), size_p1);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u4020 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u4020).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u4020;
 framePtr__system_u4020 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u4621();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u4020 = (*framePtr__system_u4020).prev;
}
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u133)(NI* p_p0) {
 NimStringV2 result;
NIM_BOOL* nimErr_;
 nimfr_("$", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 result = dollar___systemZdollars_u14(((NU64) (((NU) (ptrdiff_t) (p_p0)))));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
 return result;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u192)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0) {
}
N_LIB_PRIVATE N_NIMCALL(void, decodeN__temp_u18)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog newV_p0) {
 NimStringV2 colontmpD_;
 NimStringV2 colontmpD__2;
 NimStringV2 colontmpD__3;
 tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T3_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T4_;
NIM_BOOL* nimErr_;
 nimfr_("decodeN", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
 colontmpD__2.len = 0; colontmpD__2.p = NIM_NIL;
 colontmpD__3.len = 0; colontmpD__3.p = NIM_NIL;
 T2_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_5;
 colontmpD_ = dollar___systemZdollars_u14(((NU64) (((NU) (ptrdiff_t) (newV_p0.p)))));
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T2_[1] = colontmpD_;
 echoBinSafe(T2_, 2);
 T3_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_7;
 colontmpD__2 = dollar___temp_u78(oldV__temp_u17);
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T3_[1] = colontmpD__2;
 echoBinSafe(T3_, 2);
 T4_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_9;
 colontmpD__3 = dollar___temp_u78(newV_p0);
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T4_[1] = colontmpD__3;
 echoBinSafe(T4_, 2);
 {
  if (!!((newV_p0.p == (&newV_p0.n)))) goto LA7_;
  failedAssertImpl__stdZassertions_u310(TM__SRd76hP9cMfCzdUO857UhQQ_11);
  if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 }
LA7_: ;
 {
  LA1_:;
 }
 {
  eqdestroy___temp_u192((&newV_p0));
  if (colontmpD__3.p && !(colontmpD__3.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD__3.p);
}
  if (colontmpD__2.p && !(colontmpD__2.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD__2.p);
}
  if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, eqwasMoved___temp_u189)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0) {
 (*dest_p0).n = 0;
 (*dest_p0).p = 0;
}
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) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_Init000();
 PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 0
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 (*inner)();
#else
 PreMain();
 NimMainInner();
#endif
}
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) {
{
 NimStringV2 colontmpD_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
 tyObject_Obj__3QyuY1yTGznZdLpU6vgCog T3_;
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
 nimZeroMem((void*)(&oldV__temp_u17), sizeof(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog));
 oldV__temp_u17.n = ((NI)1);
 oldV__temp_u17.p = (&oldV__temp_u17.n);
 T2_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_3;
 colontmpD_ = dollar___systemZdollars_u14(((NU64) (((NU) (ptrdiff_t) (oldV__temp_u17.p)))));
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T2_[1] = colontmpD_;
 echoBinSafe(T2_, 2);
 T3_ = oldV__temp_u17;
 eqwasMoved___temp_u189((&oldV__temp_u17));
 decodeN__temp_u18(T3_);
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 {
  LA1_:;
 }
 {
  if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 eqdestroy___temp_u192((&oldV__temp_u17));
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-05-08T11:13:10
  • Finished 2024-05-08T11:13:11
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Obj"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            newIdentNode("int"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("p"),
            nnkPtrTy.newTree(
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("pointer"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("T"),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        nnkPtrTy.newTree(
          newIdentNode("T")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("sink")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("dest"),
        nnkVarTy.newTree(
          newIdentNode("Obj")
        ),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("source"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("sink")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("n")
        ),
        nnkDotExpr.newTree(
          newIdentNode("source"),
          newIdentNode("n")
        )
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("p")
        ),
        nnkDotExpr.newTree(
          nnkDotExpr.newTree(
            newIdentNode("dest"),
            newIdentNode("n")
          ),
          newIdentNode("addr")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("dup")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Obj"),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    nnkPragma.newTree(
      newIdentNode("nodestroy")
    ),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("dup")
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("oldV"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Obj"),
        nnkExprColonExpr.newTree(
          newIdentNode("n"),
          newLit(1)
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("decodeN"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("newV"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("Obj")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new p: "),
        nnkCast.newTree(
          newIdentNode("uint"),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("old value: "),
        newIdentNode("oldV")
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new value: "),
        newIdentNode("newV")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          ),
          nnkDotExpr.newTree(
            nnkDotExpr.newTree(
              newIdentNode("newV"),
              newIdentNode("n")
            ),
            newIdentNode("addr")
          )
        )
      )
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("oldV"),
      newIdentNode("p")
    ),
    nnkDotExpr.newTree(
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("n")
      ),
      newIdentNode("addr")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    newLit("old p: "),
    nnkCast.newTree(
      newIdentNode("uint"),
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("p")
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("decodeN"),
    nnkCommand.newTree(
      newIdentNode("move"),
      newIdentNode("oldV")
    )
  )
)
1.6.14 👎 FAIL

Output

Error: Command failed: 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
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/work/Nim/Nim/temp.nim decodeN
/home/runner/.choosenim/toolchains/nim-1.6.14/lib/system/assertions.nim failedAssertImpl
/home/runner/.choosenim/toolchains/nim-1.6.14/lib/system/assertions.nim raiseAssert
/home/runner/.choosenim/toolchains/nim-1.6.14/lib/system/fatal.nim sysFatal
Error: unhandled exception: /home/runner/work/Nim/Nim/temp.nim(20, 12) `newV.p == newV.n.addr`  [AssertionDefect]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp '
fatal.nim(54)            sysFatal
Error: unhandled exception: options.nim(645, 14) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 105.37 Kb (107,896 bytes)
#define NIM_INTBITS 64
#include "nimbase.h"
#include <string.h>
#include <setjmp.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_Obj__3QyuY1yTGznZdLpU6vgCog tyObject_Obj__3QyuY1yTGznZdLpU6vgCog;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Exception Exception;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct tySequence__SeNI9cjAwgnSTUG8yHFeMew tySequence__SeNI9cjAwgnSTUG8yHFeMew;
typedef struct TSafePoint TSafePoint;
typedef struct tyObject_StackTraceEntry__HK6FWWCL5W1d6sCawft2nw tyObject_StackTraceEntry__HK6FWWCL5W1d6sCawft2nw;
struct tyObject_Obj__3QyuY1yTGznZdLpU6vgCog {
NI n;
NI* p;
};
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
typedef NimStringDesc* tyArray__Re75IspeoxXy2oCZHwcRrA[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;
};
struct RootObj {
TNimType* m_type;
};
struct Exception {
RootObj Sup;
Exception* parent;
NCSTRING name;
NimStringDesc* message;
tySequence__SeNI9cjAwgnSTUG8yHFeMew* trace;
Exception* up;
};
typedef long tyArray__TcvIiMAJvcwzNLsZkfnFnQ[25];
struct TSafePoint {
TSafePoint* prev;
NI status;
jmp_buf context;
};
struct tyObject_StackTraceEntry__HK6FWWCL5W1d6sCawft2nw {
NCSTRING procname;
NI line;
NCSTRING filename;
};
struct tySequence__SeNI9cjAwgnSTUG8yHFeMew {
TGenericSeq Sup;
tyObject_StackTraceEntry__HK6FWWCL5W1d6sCawft2nw data[SEQ_DECL_SIZE];
};
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__systemZmemory_7)(void* a, int v, NI size);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___systemZdollars_9)(NU64 x);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringDesc** args, NI argsLen_0);
N_LIB_PRIVATE N_NIMCALL(void, decodeN__temp_24)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog newV);
static N_INLINE(void, pushSafePoint)(TSafePoint* s);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___temp_77)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog x);
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, failedAssertImpl__systemZassertions_56)(NimStringDesc* msg);
static N_INLINE(void, popSafePoint)(void);
static N_INLINE(TFrame*, getFrame)(void);
static N_INLINE(void, setFrame)(TFrame* s);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_18)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest);
N_LIB_PRIVATE N_NIMCALL(void, nimLeaveFinally)(void);
N_LIB_PRIVATE N_NIMCALL(void, reraiseException)(void);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_2, "old p: ", 7);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_4, "new p: ", 7);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_5, "old value: ", 11);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_6, "new value: ", 11);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_7, "/home/runner/work/Nim/Nim/temp.nim(20, 12) `newV.p == newV.n.addr` ", 67);
N_LIB_PRIVATE tyObject_Obj__3QyuY1yTGznZdLpU6vgCog oldV__temp_17;
extern TSafePoint* excHandler__system_2565;
extern TSafePoint* excHandler__system_2565;
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;
extern TSafePoint* excHandler__system_2565;
extern TSafePoint* excHandler__system_2565;
extern TFrame* framePtr__system_2564;
extern TFrame* framePtr__system_2564;
static N_INLINE(void, nimSetMem__systemZmemory_7)(void* a, int v, NI size) {
 void* T1_;
 T1_ = (void*)0;
 T1_ = memset(a, v, ((size_t) (size)));
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
 nimSetMem__systemZmemory_7(p, ((int) 0), size);
}
static N_INLINE(void, pushSafePoint)(TSafePoint* s) {
 (*s).prev = excHandler__system_2565;
 excHandler__system_2565 = s;
}
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 N_NIMCALL(NimStringDesc*, dollar___temp_125)(NI* p) {
 NimStringDesc* result;
 nimfr_("$", "/home/runner/work/Nim/Nim/temp.nim");
 result = NIM_NIL;
 result = dollar___systemZdollars_9(((NU64) (((NU) (ptrdiff_t) (p)))));
 popFrame();
 return result;
}
static N_INLINE(void, popSafePoint)(void) {
 excHandler__system_2565 = (*excHandler__system_2565).prev;
}
static N_INLINE(TFrame*, getFrame)(void) {
 TFrame* result;
 result = (TFrame*)0;
 result = framePtr__system_2564;
 return result;
}
static N_INLINE(void, setFrame)(TFrame* s) {
 framePtr__system_2564 = s;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_18)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest) {
}
N_LIB_PRIVATE N_NIMCALL(void, decodeN__temp_24)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog newV) {
 TSafePoint TM__SRd76hP9cMfCzdUO857UhQQ_3;
 tyArray__Re75IspeoxXy2oCZHwcRrA T1_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T3_;
 TFrame* _nimCurFrame;
 nimfr_("decodeN", "/home/runner/work/Nim/Nim/temp.nim");
 _nimCurFrame = getFrame();
 pushSafePoint(&TM__SRd76hP9cMfCzdUO857UhQQ_3);
 TM__SRd76hP9cMfCzdUO857UhQQ_3.status = setjmp(TM__SRd76hP9cMfCzdUO857UhQQ_3.context);
 if (TM__SRd76hP9cMfCzdUO857UhQQ_3.status == 0) {
 nimZeroMem((void*)T1_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T1_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_4));
 T1_[1] = dollar___systemZdollars_9(((NU64) (((NU) (ptrdiff_t) (newV.p)))));
 echoBinSafe(T1_, 2);
 nimZeroMem((void*)T2_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T2_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_5));
 T2_[1] = dollar___temp_77(oldV__temp_17);
 echoBinSafe(T2_, 2);
 nimZeroMem((void*)T3_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T3_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_6));
 T3_[1] = dollar___temp_77(newV);
 echoBinSafe(T3_, 2);
 {
  if (!!((newV.p == (&newV.n)))) goto LA6_;
  failedAssertImpl__systemZassertions_56(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_7));
 }
 LA6_: ;
 popSafePoint();
 }
 else {
  popSafePoint();
  setFrame(_nimCurFrame);
 }
 {
  eqdestroy___temp_18((&newV));
  if (TM__SRd76hP9cMfCzdUO857UhQQ_3.status != 0) nimLeaveFinally();
 }
 if (TM__SRd76hP9cMfCzdUO857UhQQ_3.status != 0) reraiseException();
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
 nimGC_setStackBottom(locals);
}
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();
 (*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) {
{
 tyArray__Re75IspeoxXy2oCZHwcRrA T1_;
 tyObject_Obj__3QyuY1yTGznZdLpU6vgCog T2_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 nimZeroMem((void*)(&oldV__temp_17), sizeof(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog));
 oldV__temp_17.n = ((NI) 1);
 oldV__temp_17.p = (&oldV__temp_17.n);
 nimZeroMem((void*)T1_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T1_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_2));
 T1_[1] = dollar___systemZdollars_9(((NU64) (((NU) (ptrdiff_t) (oldV__temp_17.p)))));
 echoBinSafe(T1_, 2);
 T2_ = oldV__temp_17;
 nimZeroMem((void*)(&oldV__temp_17), sizeof(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog));
 decodeN__temp_24(T2_);
 eqdestroy___temp_18((&oldV__temp_17));
 popFrame();
}
}

Stats

  • Started 2024-05-08T11:13:14
  • Finished 2024-05-08T11:13:14
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Obj"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            newIdentNode("int"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("p"),
            nnkPtrTy.newTree(
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("pointer"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("T"),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        nnkPtrTy.newTree(
          newIdentNode("T")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("sink")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("dest"),
        nnkVarTy.newTree(
          newIdentNode("Obj")
        ),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("source"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("sink")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("n")
        ),
        nnkDotExpr.newTree(
          newIdentNode("source"),
          newIdentNode("n")
        )
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("p")
        ),
        nnkDotExpr.newTree(
          nnkDotExpr.newTree(
            newIdentNode("dest"),
            newIdentNode("n")
          ),
          newIdentNode("addr")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("dup")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Obj"),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    nnkPragma.newTree(
      newIdentNode("nodestroy")
    ),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("dup")
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("oldV"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Obj"),
        nnkExprColonExpr.newTree(
          newIdentNode("n"),
          newLit(1)
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("decodeN"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("newV"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("Obj")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new p: "),
        nnkCast.newTree(
          newIdentNode("uint"),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("old value: "),
        newIdentNode("oldV")
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new value: "),
        newIdentNode("newV")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          ),
          nnkDotExpr.newTree(
            nnkDotExpr.newTree(
              newIdentNode("newV"),
              newIdentNode("n")
            ),
            newIdentNode("addr")
          )
        )
      )
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("oldV"),
      newIdentNode("p")
    ),
    nnkDotExpr.newTree(
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("n")
      ),
      newIdentNode("addr")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    newLit("old p: "),
    nnkCast.newTree(
      newIdentNode("uint"),
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("p")
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("decodeN"),
    nnkCommand.newTree(
      newIdentNode("move"),
      newIdentNode("oldV")
    )
  )
)
1.4.8 👎 FAIL

Output

Error: Command failed: 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
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/work/Nim/Nim/temp.nim decodeN
/home/runner/.choosenim/toolchains/nim-1.4.8/lib/system/assertions.nim failedAssertImpl
/home/runner/.choosenim/toolchains/nim-1.4.8/lib/system/assertions.nim raiseAssert
/home/runner/.choosenim/toolchains/nim-1.4.8/lib/system/fatal.nim sysFatal
Error: unhandled exception: /home/runner/work/Nim/Nim/temp.nim(20, 12) `newV.p == newV.n.addr`  [AssertionDefect]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp '

IR

Compiled filesize 97.87 Kb (100,216 bytes)
#define NIM_INTBITS 64
#include "nimbase.h"
#include <string.h>
#include <setjmp.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_Obj__aUn5SLDz0QPhgEhlLh33kg tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Exception Exception;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct tySequence__uB9b75OUPRENsBAu4AnoePA tySequence__uB9b75OUPRENsBAu4AnoePA;
typedef struct TSafePoint TSafePoint;
typedef struct tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA;
struct tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg {
NI n;
NI* p;
};
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
typedef NimStringDesc* tyArray__Re75IspeoxXy2oCZHwcRrA[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;
};
struct RootObj {
TNimType* m_type;
};
struct Exception {
RootObj Sup;
Exception* parent;
NCSTRING name;
NimStringDesc* message;
tySequence__uB9b75OUPRENsBAu4AnoePA* trace;
Exception* up;
};
typedef long tyArray__TcvIiMAJvcwzNLsZkfnFnQ[25];
struct TSafePoint {
TSafePoint* prev;
NI status;
jmp_buf context;
};
struct tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA {
NCSTRING procname;
NI line;
NCSTRING filename;
};
struct tySequence__uB9b75OUPRENsBAu4AnoePA {
TGenericSeq Sup;
tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA data[SEQ_DECL_SIZE];
};
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___M2d4UEGH9cZOvte6rEhvUTQ)(NU64 x);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringDesc** args, NI argsLen_0);
N_LIB_PRIVATE N_NIMCALL(void, decodeN__VmWgbyObnJU9blGk5yE6Xow)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg newV);
static N_INLINE(void, pushSafePoint)(TSafePoint* s);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___Ib0RvzV2R9cEkwUHdYL19avA)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg x);
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, failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A)(NimStringDesc* msg);
static N_INLINE(void, popSafePoint)(void);
static N_INLINE(TFrame*, getFrame)(void);
static N_INLINE(void, setFrame)(TFrame* s);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg* dest);
N_LIB_PRIVATE N_NIMCALL(void, nimLeaveFinally)(void);
N_LIB_PRIVATE N_NIMCALL(void, reraiseException)(void);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom);
N_LIB_PRIVATE N_NIMCALL(void, systemDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_2, "old p: ", 7);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_4, "new p: ", 7);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_5, "old value: ", 11);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_6, "new value: ", 11);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_7, "/home/runner/work/Nim/Nim/temp.nim(20, 12) `newV.p == newV.n.ad"
"dr` ", 67);
N_LIB_PRIVATE tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg oldV__AFz13lOl6ux2K6DQb2fYAQ;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size) {
 void* T1_;
 T1_ = (void*)0;
 T1_ = memset(a, v, ((size_t) (size)));
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
 nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory(p, ((int) 0), size);
}
static N_INLINE(void, pushSafePoint)(TSafePoint* s) {
 (*s).prev = excHandler__rqLlY5bs9atDw2OXYqJEn5g;
 excHandler__rqLlY5bs9atDw2OXYqJEn5g = s;
}
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 N_NIMCALL(NimStringDesc*, dollar___cNWAXSpFRtj9bkL4Q1ZfdmA)(NI* p) {
 NimStringDesc* result;
 nimfr_("$", "/home/runner/work/Nim/Nim/temp.nim");
 result = (NimStringDesc*)0;
 result = dollar___M2d4UEGH9cZOvte6rEhvUTQ(((NU64) (((NU) (ptrdiff_t) (p)))));
 popFrame();
 return result;
}
static N_INLINE(void, popSafePoint)(void) {
 excHandler__rqLlY5bs9atDw2OXYqJEn5g = (*excHandler__rqLlY5bs9atDw2OXYqJEn5g).prev;
}
static N_INLINE(TFrame*, getFrame)(void) {
 TFrame* result;
 result = (TFrame*)0;
 result = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
 return result;
}
static N_INLINE(void, setFrame)(TFrame* s) {
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg* dest) {
}
N_LIB_PRIVATE N_NIMCALL(void, decodeN__VmWgbyObnJU9blGk5yE6Xow)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg newV) {
 TSafePoint TM__SRd76hP9cMfCzdUO857UhQQ_3;
 tyArray__Re75IspeoxXy2oCZHwcRrA T1_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T3_;
 TFrame* _nimCurFrame;
 nimfr_("decodeN", "/home/runner/work/Nim/Nim/temp.nim");
 _nimCurFrame = getFrame();
 pushSafePoint(&TM__SRd76hP9cMfCzdUO857UhQQ_3);
 TM__SRd76hP9cMfCzdUO857UhQQ_3.status = setjmp(TM__SRd76hP9cMfCzdUO857UhQQ_3.context);
 if (TM__SRd76hP9cMfCzdUO857UhQQ_3.status == 0) {
 nimZeroMem((void*)T1_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T1_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_4));
 T1_[1] = dollar___M2d4UEGH9cZOvte6rEhvUTQ(((NU64) (((NU) (ptrdiff_t) (newV.p)))));
 echoBinSafe(T1_, 2);
 nimZeroMem((void*)T2_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T2_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_5));
 T2_[1] = dollar___Ib0RvzV2R9cEkwUHdYL19avA(oldV__AFz13lOl6ux2K6DQb2fYAQ);
 echoBinSafe(T2_, 2);
 nimZeroMem((void*)T3_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T3_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_6));
 T3_[1] = dollar___Ib0RvzV2R9cEkwUHdYL19avA(newV);
 echoBinSafe(T3_, 2);
 {
  if (!!((newV.p == (&newV.n)))) goto LA6_;
  failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_7));
 }
 LA6_: ;
 popSafePoint();
 }
 else {
  popSafePoint();
  setFrame(_nimCurFrame);
 }
 {
  eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ((&newV));
  if (TM__SRd76hP9cMfCzdUO857UhQQ_3.status != 0) nimLeaveFinally();
 }
 if (TM__SRd76hP9cMfCzdUO857UhQQ_3.status != 0) reraiseException();
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
 nimGC_setStackBottom(locals);
}
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();
 (*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) {
{
 tyArray__Re75IspeoxXy2oCZHwcRrA T1_;
 tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg T2_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 nimZeroMem((void*)(&oldV__AFz13lOl6ux2K6DQb2fYAQ), sizeof(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg));
 oldV__AFz13lOl6ux2K6DQb2fYAQ.n = ((NI) 1);
 oldV__AFz13lOl6ux2K6DQb2fYAQ.p = (&oldV__AFz13lOl6ux2K6DQb2fYAQ.n);
 nimZeroMem((void*)T1_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T1_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_2));
 T1_[1] = dollar___M2d4UEGH9cZOvte6rEhvUTQ(((NU64) (((NU) (ptrdiff_t) (oldV__AFz13lOl6ux2K6DQb2fYAQ.p)))));
 echoBinSafe(T1_, 2);
 T2_ = oldV__AFz13lOl6ux2K6DQb2fYAQ;
 nimZeroMem((void*)(&oldV__AFz13lOl6ux2K6DQb2fYAQ), sizeof(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg));
 decodeN__VmWgbyObnJU9blGk5yE6Xow(T2_);
 eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ((&oldV__AFz13lOl6ux2K6DQb2fYAQ));
 popFrame();
}
}

Stats

  • Started 2024-05-08T11:13:17
  • Finished 2024-05-08T11:13:17
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Obj"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            newIdentNode("int"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("p"),
            nnkPtrTy.newTree(
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("pointer"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("T"),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        nnkPtrTy.newTree(
          newIdentNode("T")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("sink")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("dest"),
        nnkVarTy.newTree(
          newIdentNode("Obj")
        ),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("source"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("sink")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("n")
        ),
        nnkDotExpr.newTree(
          newIdentNode("source"),
          newIdentNode("n")
        )
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("p")
        ),
        nnkDotExpr.newTree(
          nnkDotExpr.newTree(
            newIdentNode("dest"),
            newIdentNode("n")
          ),
          newIdentNode("addr")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("dup")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Obj"),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    nnkPragma.newTree(
      newIdentNode("nodestroy")
    ),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("dup")
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("oldV"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Obj"),
        nnkExprColonExpr.newTree(
          newIdentNode("n"),
          newLit(1)
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("decodeN"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("newV"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("Obj")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new p: "),
        nnkCast.newTree(
          newIdentNode("uint"),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("old value: "),
        newIdentNode("oldV")
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new value: "),
        newIdentNode("newV")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          ),
          nnkDotExpr.newTree(
            nnkDotExpr.newTree(
              newIdentNode("newV"),
              newIdentNode("n")
            ),
            newIdentNode("addr")
          )
        )
      )
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("oldV"),
      newIdentNode("p")
    ),
    nnkDotExpr.newTree(
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("n")
      ),
      newIdentNode("addr")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    newLit("old p: "),
    nnkCast.newTree(
      newIdentNode("uint"),
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("p")
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("decodeN"),
    nnkCommand.newTree(
      newIdentNode("move"),
      newIdentNode("oldV")
    )
  )
)
1.2.18 👎 FAIL

Output

Error: Command failed: 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
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/work/Nim/Nim/temp.nim decodeN
/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/assertions.nim failedAssertImpl
/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/assertions.nim raiseAssert
/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/fatal.nim sysFatal
Error: unhandled exception: /home/runner/work/Nim/Nim/temp.nim(20, 12) `newV.p == newV.n.addr`  [AssertionError]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp '

IR

Compiled filesize 97.91 Kb (100,256 bytes)
#define NIM_INTBITS 64
#include "nimbase.h"
#include <string.h>
#include <setjmp.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_Obj__aUn5SLDz0QPhgEhlLh33kg tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Exception Exception;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct tySequence__uB9b75OUPRENsBAu4AnoePA tySequence__uB9b75OUPRENsBAu4AnoePA;
typedef struct TSafePoint TSafePoint;
typedef struct tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA;
struct tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg {
NI n;
NI* p;
};
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
typedef NimStringDesc* tyArray__Re75IspeoxXy2oCZHwcRrA[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;
};
struct RootObj {
TNimType* m_type;
};
struct Exception {
RootObj Sup;
Exception* parent;
NCSTRING name;
NimStringDesc* message;
tySequence__uB9b75OUPRENsBAu4AnoePA* trace;
Exception* up;
};
typedef long tyArray__TcvIiMAJvcwzNLsZkfnFnQ[25];
struct TSafePoint {
TSafePoint* prev;
NI status;
jmp_buf context;
};
struct tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA {
NCSTRING procname;
NI line;
NCSTRING filename;
};
struct tySequence__uB9b75OUPRENsBAu4AnoePA {
TGenericSeq Sup;
tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA data[SEQ_DECL_SIZE];
};
N_LIB_PRIVATE N_NOINLINE(void, chckNil)(void* p);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___RkX9btpg5sQIaP8yYXB6tbA)(NU64 x);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringDesc** args, NI argsLen_0);
N_LIB_PRIVATE N_NIMCALL(void, decodeN__VmWgbyObnJU9blGk5yE6Xow)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg newV);
static N_INLINE(void, pushSafePoint)(TSafePoint* s);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___Ib0RvzV2R9cEkwUHdYL19avA)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg x);
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, failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A)(NimStringDesc* msg);
static N_INLINE(void, popSafePoint)(void);
static N_INLINE(TFrame*, getFrame)(void);
static N_INLINE(void, setFrame)(TFrame* s);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg* dest);
N_LIB_PRIVATE N_NIMCALL(void, nimLeaveFinally)(void);
N_LIB_PRIVATE N_NIMCALL(void, reraiseException)(void);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom);
N_LIB_PRIVATE N_NIMCALL(void, systemDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_2, "old p: ", 7);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_4, "new p: ", 7);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_5, "old value: ", 11);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_6, "new value: ", 11);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_7, "/home/runner/work/Nim/Nim/temp.nim(20, 12) `newV.p == newV.n.ad"
"dr` ", 67);
N_LIB_PRIVATE tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg oldV__AFz13lOl6ux2K6DQb2fYAQ;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size) {
 void* T1_;
 T1_ = (void*)0;
 T1_ = memset(a, v, ((size_t) (size)));
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
 nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory(p, ((int) 0), size);
}
static N_INLINE(void, pushSafePoint)(TSafePoint* s) {
 (*s).prev = excHandler__rqLlY5bs9atDw2OXYqJEn5g;
 excHandler__rqLlY5bs9atDw2OXYqJEn5g = s;
}
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 N_NIMCALL(NimStringDesc*, dollar___cNWAXSpFRtj9bkL4Q1ZfdmA)(NI* p) {
 NimStringDesc* result;
 nimfr_("$", "/home/runner/work/Nim/Nim/temp.nim");
 result = NIM_NIL;
 result = dollar___RkX9btpg5sQIaP8yYXB6tbA(((NU64) (((NU) (ptrdiff_t) (p)))));
 popFrame();
 return result;
}
static N_INLINE(void, popSafePoint)(void) {
 excHandler__rqLlY5bs9atDw2OXYqJEn5g = (*excHandler__rqLlY5bs9atDw2OXYqJEn5g).prev;
}
static N_INLINE(TFrame*, getFrame)(void) {
 TFrame* result;
 result = (TFrame*)0;
 result = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
 return result;
}
static N_INLINE(void, setFrame)(TFrame* s) {
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg* dest) {
}
N_LIB_PRIVATE N_NIMCALL(void, decodeN__VmWgbyObnJU9blGk5yE6Xow)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg newV) {
 TSafePoint TM__SRd76hP9cMfCzdUO857UhQQ_3;
 TFrame* _nimCurFrame;
 nimfr_("decodeN", "/home/runner/work/Nim/Nim/temp.nim");
 _nimCurFrame = getFrame();
 pushSafePoint(&TM__SRd76hP9cMfCzdUO857UhQQ_3);
 TM__SRd76hP9cMfCzdUO857UhQQ_3.status = setjmp(TM__SRd76hP9cMfCzdUO857UhQQ_3.context);
 if (TM__SRd76hP9cMfCzdUO857UhQQ_3.status == 0) {
  tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
  tyArray__Re75IspeoxXy2oCZHwcRrA T3_;
  tyArray__Re75IspeoxXy2oCZHwcRrA T4_;
  nimZeroMem((void*)T2_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
  T2_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_4));
  T2_[1] = dollar___RkX9btpg5sQIaP8yYXB6tbA(((NU64) (((NU) (ptrdiff_t) (newV.p)))));
  echoBinSafe(T2_, 2);
  nimZeroMem((void*)T3_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
  T3_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_5));
  T3_[1] = dollar___Ib0RvzV2R9cEkwUHdYL19avA(oldV__AFz13lOl6ux2K6DQb2fYAQ);
  echoBinSafe(T3_, 2);
  nimZeroMem((void*)T4_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
  T4_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_6));
  T4_[1] = dollar___Ib0RvzV2R9cEkwUHdYL19avA(newV);
  echoBinSafe(T4_, 2);
  {
   if (!!((newV.p == (&newV.n)))) goto LA7_;
   failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_7));
  }
  LA7_: ;
  popSafePoint();
 }
 else {
  popSafePoint();
  setFrame(_nimCurFrame);
 }
 {
  eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ((&newV));
  if (TM__SRd76hP9cMfCzdUO857UhQQ_3.status != 0) nimLeaveFinally();
 }
 if (TM__SRd76hP9cMfCzdUO857UhQQ_3.status != 0) reraiseException();
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
 nimGC_setStackBottom(locals);
}
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();
 (*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) {
{
 tyArray__Re75IspeoxXy2oCZHwcRrA T1_;
 tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg T2_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 chckNil((void*)(&oldV__AFz13lOl6ux2K6DQb2fYAQ));
 nimZeroMem((void*)(&oldV__AFz13lOl6ux2K6DQb2fYAQ), sizeof(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg));
 oldV__AFz13lOl6ux2K6DQb2fYAQ.n = ((NI) 1);
 oldV__AFz13lOl6ux2K6DQb2fYAQ.p = (&oldV__AFz13lOl6ux2K6DQb2fYAQ.n);
 nimZeroMem((void*)T1_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T1_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_2));
 T1_[1] = dollar___RkX9btpg5sQIaP8yYXB6tbA(((NU64) (((NU) (ptrdiff_t) (oldV__AFz13lOl6ux2K6DQb2fYAQ.p)))));
 echoBinSafe(T1_, 2);
 T2_ = oldV__AFz13lOl6ux2K6DQb2fYAQ;
 chckNil((void*)(&oldV__AFz13lOl6ux2K6DQb2fYAQ));
 nimZeroMem((void*)(&oldV__AFz13lOl6ux2K6DQb2fYAQ), sizeof(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg));
 decodeN__VmWgbyObnJU9blGk5yE6Xow(T2_);
 eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ((&oldV__AFz13lOl6ux2K6DQb2fYAQ));
 popFrame();
}
}

Stats

  • Started 2024-05-08T11:13:19
  • Finished 2024-05-08T11:13:20
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Obj"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            newIdentNode("int"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("p"),
            nnkPtrTy.newTree(
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("pointer"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("T"),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        nnkPtrTy.newTree(
          newIdentNode("T")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("sink")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("dest"),
        nnkVarTy.newTree(
          newIdentNode("Obj")
        ),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("source"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("sink")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("n")
        ),
        nnkDotExpr.newTree(
          newIdentNode("source"),
          newIdentNode("n")
        )
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("p")
        ),
        nnkDotExpr.newTree(
          nnkDotExpr.newTree(
            newIdentNode("dest"),
            newIdentNode("n")
          ),
          newIdentNode("addr")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("dup")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Obj"),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    nnkPragma.newTree(
      newIdentNode("nodestroy")
    ),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("dup")
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("oldV"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Obj"),
        nnkExprColonExpr.newTree(
          newIdentNode("n"),
          newLit(1)
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("decodeN"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("newV"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("Obj")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new p: "),
        nnkCast.newTree(
          newIdentNode("uint"),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("old value: "),
        newIdentNode("oldV")
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new value: "),
        newIdentNode("newV")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          ),
          nnkDotExpr.newTree(
            nnkDotExpr.newTree(
              newIdentNode("newV"),
              newIdentNode("n")
            ),
            newIdentNode("addr")
          )
        )
      )
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("oldV"),
      newIdentNode("p")
    ),
    nnkDotExpr.newTree(
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("n")
      ),
      newIdentNode("addr")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    newLit("old p: "),
    nnkCast.newTree(
      newIdentNode("uint"),
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("p")
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("decodeN"),
    nnkCommand.newTree(
      newIdentNode("move"),
      newIdentNode("oldV")
    )
  )
)
1.0.10 👎 FAIL

Output

Error: Command failed: 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
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/work/Nim/Nim/temp.nim decodeN
/home/runner/.choosenim/toolchains/nim-1.0.10/lib/system/assertions.nim failedAssertImpl
/home/runner/.choosenim/toolchains/nim-1.0.10/lib/system/assertions.nim raiseAssert
/home/runner/.choosenim/toolchains/nim-1.0.10/lib/system/fatal.nim sysFatal
Error: unhandled exception: /home/runner/work/Nim/Nim/temp.nim(20, 12) `newV.p == newV.n.addr`  [AssertionError]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp '

IR

Compiled filesize 97.84 Kb (100,184 bytes)
#define NIM_INTBITS 64
#include "nimbase.h"
#include <setjmp.h>
#include <string.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_Obj__aUn5SLDz0QPhgEhlLh33kg tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg;
typedef struct Exception Exception;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct tySequence__uB9b75OUPRENsBAu4AnoePA tySequence__uB9b75OUPRENsBAu4AnoePA;
typedef struct TSafePoint TSafePoint;
typedef struct tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA;
struct tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg {
NI n;
NI* p;
};
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;
};
struct RootObj {
TNimType* m_type;
};
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct Exception {
RootObj Sup;
Exception* parent;
NCSTRING name;
NimStringDesc* message;
tySequence__uB9b75OUPRENsBAu4AnoePA* trace;
NU raiseId;
Exception* up;
};
typedef long tyArray__TcvIiMAJvcwzNLsZkfnFnQ[25];
typedef struct {
N_NIMCALL_PTR(NIM_BOOL, ClP_0) (Exception* e, void* ClE_0);
void* ClE_0;
} tyProc__NT9bSe2DDkjdtx7j9aov2Z6g;
struct TSafePoint {
TSafePoint* prev;
NI status;
jmp_buf context;
NIM_BOOL hasRaiseAction;
tyProc__NT9bSe2DDkjdtx7j9aov2Z6g raiseAction;
};
typedef NimStringDesc* tyArray__nHXaesL0DJZHyVS07ARPRA[1];
typedef NimStringDesc* tyArray__Re75IspeoxXy2oCZHwcRrA[2];
struct tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA {
NCSTRING procname;
NI line;
NCSTRING filename;
};
struct tySequence__uB9b75OUPRENsBAu4AnoePA {
TGenericSeq Sup;
tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA data[SEQ_DECL_SIZE];
};
static N_INLINE(void, pushSafePoint)(TSafePoint* s);
N_LIB_PRIVATE N_NIMCALL(void, eqsink___WuHRWIKdmC5QPz5R2ZxCbg)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg* dest, tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg source);
N_NIMCALL(void, echoBinSafe)(NimStringDesc** args, NI argsLen_0);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw)(void);
static N_INLINE(void, popFrame)(void);
static N_INLINE(void, popSafePoint)(void);
static N_INLINE(TFrame*, getFrame)(void);
static N_INLINE(void, setFrame)(TFrame* s);
N_NIMCALL(void, reraiseException)(void);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___RkX9btpg5sQIaP8yYXB6tbA)(NU64 x);
N_LIB_PRIVATE N_NIMCALL(void, decodeN__VmWgbyObnJU9blGk5yE6Xow)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg newV);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___Ib0RvzV2R9cEkwUHdYL19avA)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg x);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___Ib0RvzV2R9cEkwUHdYL19avA_2)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg x);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A)(NimStringDesc* msg);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg* dest);
N_NOINLINE(void, chckNil)(void* p);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom);
N_LIB_PRIVATE N_NIMCALL(void, systemDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg oldV__AFz13lOl6ux2K6DQb2fYAQ;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_4, "sink", 4);
NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_4)}
;
NIM_CONST tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg TM__SRd76hP9cMfCzdUO857UhQQ_5 = {((NI) 1), NIM_NIL};
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_6, "old p: ", 7);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_8, "new p: ", 7);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_9, "old value: ", 11);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_10, "new value: ", 11);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_11, "/home/runner/work/Nim/Nim/temp.nim(20, 12) `newV.p == newV.n.ad"
"dr` ", 67);
static N_INLINE(void, pushSafePoint)(TSafePoint* s) {	(*s).hasRaiseAction = NIM_FALSE;
 (*s).prev = excHandler__rqLlY5bs9atDw2OXYqJEn5g;
 excHandler__rqLlY5bs9atDw2OXYqJEn5g = s;
}
static N_INLINE(void, nimFrame)(TFrame* s) {	NI T1_;
 T1_ = (NI)0;
 {
  if (!(framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw == NIM_NIL)) goto LA4_;
  T1_ = ((NI) 0);
 }
 goto LA2_;
 LA4_: ;
 {
  T1_ = ((NI) ((NI16)((*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).calldepth + ((NI16) 1))));
 }
 LA2_: ;
 (*s).calldepth = ((NI16) (T1_));
 (*s).prev = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
 {
  if (!((*s).calldepth == ((NI16) (((NI) 2000))))) goto LA9_;
  callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw();
 }
 LA9_: ;
}
static N_INLINE(void, popFrame)(void) {	framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = (*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, eqsink___WuHRWIKdmC5QPz5R2ZxCbg)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg* dest, tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg source) {	nimfr_("=sink", "/home/runner/work/Nim/Nim/temp.nim");
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
 (*dest).n = source.n;
 (*dest).p = (&(*dest).n);
 popFrame();
}
static N_INLINE(void, popSafePoint)(void) {	excHandler__rqLlY5bs9atDw2OXYqJEn5g = (*excHandler__rqLlY5bs9atDw2OXYqJEn5g).prev;
}
static N_INLINE(TFrame*, getFrame)(void) {	TFrame* result;
 result = (TFrame*)0;
 result = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
 return result;
}
static N_INLINE(void, setFrame)(TFrame* s) {	framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
}
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size) {	void* T1_;
 T1_ = (void*)0;
 T1_ = memset(a, v, ((size_t) (size)));
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {	nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory(p, ((int) 0), size);
}
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___cNWAXSpFRtj9bkL4Q1ZfdmA)(NI* p) {	NimStringDesc* result;
 nimfr_("$", "/home/runner/work/Nim/Nim/temp.nim");
 result = (NimStringDesc*)0;
 result = dollar___RkX9btpg5sQIaP8yYXB6tbA(((NU64) (((NU) (ptrdiff_t) (p)))));
 popFrame();
 return result;
}
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___cNWAXSpFRtj9bkL4Q1ZfdmA_2)(NI* p) {	NimStringDesc* result;
 nimfr_("$", "/home/runner/work/Nim/Nim/temp.nim");
 result = (NimStringDesc*)0;
 result = dollar___RkX9btpg5sQIaP8yYXB6tbA(((NU64) (((NU) (ptrdiff_t) (p)))));
 popFrame();
 return result;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg* dest) {}
N_LIB_PRIVATE N_NIMCALL(void, decodeN__VmWgbyObnJU9blGk5yE6Xow)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg newV) {	TSafePoint TM__SRd76hP9cMfCzdUO857UhQQ_7;
 TFrame* _nimCurFrame;
 nimfr_("decodeN", "/home/runner/work/Nim/Nim/temp.nim");
 _nimCurFrame = getFrame();
 pushSafePoint(&TM__SRd76hP9cMfCzdUO857UhQQ_7);
 TM__SRd76hP9cMfCzdUO857UhQQ_7.status = setjmp(TM__SRd76hP9cMfCzdUO857UhQQ_7.context);
 if (TM__SRd76hP9cMfCzdUO857UhQQ_7.status == 0) {
  tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
  tyArray__Re75IspeoxXy2oCZHwcRrA T3_;
  tyArray__Re75IspeoxXy2oCZHwcRrA T4_;
  nimZeroMem((void*)T2_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
  T2_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_8));
  T2_[1] = dollar___RkX9btpg5sQIaP8yYXB6tbA(((NU64) (((NU) (ptrdiff_t) (newV.p)))));
  echoBinSafe(T2_, 2);
  nimZeroMem((void*)T3_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
  T3_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_9));
  T3_[1] = dollar___Ib0RvzV2R9cEkwUHdYL19avA(oldV__AFz13lOl6ux2K6DQb2fYAQ);
  echoBinSafe(T3_, 2);
  nimZeroMem((void*)T4_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
  T4_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_10));
  T4_[1] = dollar___Ib0RvzV2R9cEkwUHdYL19avA_2(newV);
  echoBinSafe(T4_, 2);
  {
   if (!!((newV.p == (&newV.n)))) goto LA7_;
   failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_11));
  }
  LA7_: ;
  popSafePoint();
 }
 else {
  popSafePoint();
  setFrame(_nimCurFrame);
 }
 {
  eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ((&newV));
 }
 if (TM__SRd76hP9cMfCzdUO857UhQQ_7.status != 0) reraiseException();
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals) {	nimGC_setStackBottom(locals);
}
void PreMainInner(void) {
}
int cmdCount;
char** cmdLine;
char** gEnv;
void PreMain(void) {
 void (*volatile inner)(void);
 inner = PreMainInner;
 systemDatInit000();
 initStackBottomWith((void *)&inner);
 systemInit000();
 (*inner)();
}
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) {
{
 TSafePoint TM__SRd76hP9cMfCzdUO857UhQQ_2;
 TFrame* _nimCurFrame;
 tyArray__Re75IspeoxXy2oCZHwcRrA T4_;
 tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg T5_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 _nimCurFrame = getFrame();
 pushSafePoint(&TM__SRd76hP9cMfCzdUO857UhQQ_2);
 TM__SRd76hP9cMfCzdUO857UhQQ_2.status = setjmp(TM__SRd76hP9cMfCzdUO857UhQQ_2.context);
 if (TM__SRd76hP9cMfCzdUO857UhQQ_2.status == 0) {
  eqsink___WuHRWIKdmC5QPz5R2ZxCbg((&oldV__AFz13lOl6ux2K6DQb2fYAQ), TM__SRd76hP9cMfCzdUO857UhQQ_5);
  popSafePoint();
 }
 else {
  popSafePoint();
  setFrame(_nimCurFrame);
 }
 {
 }
 if (TM__SRd76hP9cMfCzdUO857UhQQ_2.status != 0) reraiseException();
 oldV__AFz13lOl6ux2K6DQb2fYAQ.p = (&oldV__AFz13lOl6ux2K6DQb2fYAQ.n);
 nimZeroMem((void*)T4_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T4_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_6));
 T4_[1] = dollar___RkX9btpg5sQIaP8yYXB6tbA(((NU64) (((NU) (ptrdiff_t) (oldV__AFz13lOl6ux2K6DQb2fYAQ.p)))));
 echoBinSafe(T4_, 2);
 T5_ = oldV__AFz13lOl6ux2K6DQb2fYAQ;
 chckNil((void*)(&oldV__AFz13lOl6ux2K6DQb2fYAQ));
 nimZeroMem((void*)(&oldV__AFz13lOl6ux2K6DQb2fYAQ), sizeof(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg));
 decodeN__VmWgbyObnJU9blGk5yE6Xow(T5_);
 eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ((&oldV__AFz13lOl6ux2K6DQb2fYAQ));
 popFrame();
}
}

Stats

  • Started 2024-05-08T11:13:22
  • Finished 2024-05-08T11:13:22
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Obj"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            newIdentNode("int"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("p"),
            nnkPtrTy.newTree(
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("pointer"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("T"),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        nnkPtrTy.newTree(
          newIdentNode("T")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("sink")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("dest"),
        nnkVarTy.newTree(
          newIdentNode("Obj")
        ),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("source"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("sink")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("n")
        ),
        nnkDotExpr.newTree(
          newIdentNode("source"),
          newIdentNode("n")
        )
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("p")
        ),
        nnkDotExpr.newTree(
          nnkDotExpr.newTree(
            newIdentNode("dest"),
            newIdentNode("n")
          ),
          newIdentNode("addr")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("dup")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Obj"),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    nnkPragma.newTree(
      newIdentNode("nodestroy")
    ),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("dup")
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("oldV"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Obj"),
        nnkExprColonExpr.newTree(
          newIdentNode("n"),
          newLit(1)
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("decodeN"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("newV"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("Obj")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new p: "),
        nnkCast.newTree(
          newIdentNode("uint"),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("old value: "),
        newIdentNode("oldV")
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new value: "),
        newIdentNode("newV")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          ),
          nnkDotExpr.newTree(
            nnkDotExpr.newTree(
              newIdentNode("newV"),
              newIdentNode("n")
            ),
            newIdentNode("addr")
          )
        )
      )
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("oldV"),
      newIdentNode("p")
    ),
    nnkDotExpr.newTree(
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("n")
      ),
      newIdentNode("addr")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    newLit("old p: "),
    nnkCast.newTree(
      newIdentNode("uint"),
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("p")
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("decodeN"),
    nnkCommand.newTree(
      newIdentNode("move"),
      newIdentNode("oldV")
    )
  )
)
Stats
  • GCC 11.4.0
  • Clang 14.0.0
  • NodeJS 20.2
  • Created 2024-05-08T11:12:38Z
  • Comments 1
  • Commands 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

🤖 Bug found in 19 minutes bisecting 7 commits at 0 commits per second

@Araq
Copy link
Member

Araq commented May 8, 2024

Nim's model does not allow for self-pointing objects:

  # Always point to my own 'n' field
  dest.p = dest.n.addr

This is not supported. I am not sure what it would take to support it.

@haoyu234
Copy link
Contributor Author

haoyu234 commented May 9, 2024

Okay, I should turn off this issue.

@haoyu234 haoyu234 closed this as completed May 9, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants