This is the mail archive of the guile@cygnus.com mailing list for the guile project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
karlheg@inetarena.com (Karl M. Hegbloom) writes: > I'm still learning C as well as scheme. Can someone help me > understand this bit of code, please? > > In guile-core/libguile/gsubr.c:84, it goes: > > long tmp = ((((SCM_CELLPTR)(SCM_CAR(symcell)))-scm_heap_org)<<8); > if (SCM_GSUBR_MAX < req + opt + rst) { > fputs("ERROR in scm_make_gsubr: too many args\n", stderr); > exit (1); > } > if ((tmp>>8) != ((SCM_CELLPTR)(SCM_CAR(symcell))-scm_heap_org)) > tmp = 0; > > ... Why does it first << 8 and then right away do >> 8, recompute and > compare like that? How could the value change? The value might not fit in the number of bits available (24 for 32 bit longs).