From 0fc9040fa248c7d964966a568749d1398a457cd8 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Sun, 22 Jan 2012 23:20:50 +0100 Subject: Parenthesize and type `SCM_FRAME' macros; check layout of `scm_vm_frame'. * libguile/frames.c: Add compile-time assertions on the layout of `struct scm_vm_frame'. (RELOC): Parenthesize and type VAL. * libguile/frames.h (SCM_FRAME_STRUCT): Write in terms of `SCM_FRAME_DATA_ADDRESS'. (SCM_FRAME_DATA_ADDRESS): Parenthesize and type FP. (SCM_FRAME_SET_DYNAMIC_LINK): Write in terms of `SCM_FRAME_DYNAMIC_LINK'. * libguile/vm.c (RELOC): Parenthesize and type SCM_P. --- libguile/frames.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'libguile/frames.c') diff --git a/libguile/frames.c b/libguile/frames.c index 2e83cde9a..c7505b262 100644 --- a/libguile/frames.c +++ b/libguile/frames.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001, 2009, 2010, 2011 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -24,9 +24,16 @@ #include #include "_scm.h" #include "frames.h" +#include + +/* Make sure assumptions on the layout of `struct scm_vm_frame' hold. */ +verify (sizeof (SCM) == sizeof (SCM *)); +verify (sizeof (struct scm_vm_frame) == 5 * sizeof (SCM)); +verify (offsetof (struct scm_vm_frame, dynamic_link) == 0); -#define RELOC(frame, val) (val + SCM_VM_FRAME_OFFSET (frame)) +#define RELOC(frame, val) \ + (((SCM *) (val)) + SCM_VM_FRAME_OFFSET (frame)) SCM scm_c_make_frame (SCM stack_holder, SCM *fp, SCM *sp, -- cgit v1.2.3