--- gforth/cross.fs 2007/03/31 21:43:18 1.163 +++ gforth/cross.fs 2007/12/31 18:40:23 1.166 @@ -1,13 +1,13 @@ \ CROSS.FS The Cross-Compiler 06oct92py \ Idea and implementation: Bernd Paysan (py) -\ Copyright (C) 1995,1996,1997,1998,1999,2000,2003,2004,2005,2006 Free Software Foundation, Inc. +\ Copyright (C) 1995,1996,1997,1998,1999,2000,2003,2004,2005,2006,2007 Free Software Foundation, Inc. \ This file is part of Gforth. \ Gforth is free software; you can redistribute it and/or \ modify it under the terms of the GNU General Public License -\ as published by the Free Software Foundation; either version 2 +\ as published by the Free Software Foundation, either version 3 \ of the License, or (at your option) any later version. \ This program is distributed in the hope that it will be useful, @@ -16,8 +16,7 @@ \ GNU General Public License for more details. \ You should have received a copy of the GNU General Public License -\ along with this program; if not, write to the Free Software -\ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. +\ along with this program. If not, see http://www.gnu.org/licenses/. 0 [IF] @@ -1244,6 +1243,9 @@ bits/byte Constant tbits/byte H tbits/char bits/byte / Constant tbyte +: >signed ( u -- n ) + 1 tbits/char tcell * 1- lshift 2dup and + IF negate or ELSE drop THEN ; \ Variables 06oct92py @@ -2316,10 +2318,12 @@ Variable prim# prim# @ (THeader ( S xt ghost ) ['] prim-resolved over >comp ! dup >ghost-flags set-flag - over resolve-noforwards T A, H s" EC" T $has? H 0= IF + over resolve-noforwards T A, H alias-mask flag! + ELSE + T here H resolve-noforwards T A, H THEN -1 prim# +! ; >CROSS @@ -2975,10 +2979,17 @@ T has? primcentric H [IF] : (callcm) T here 0 a, 0 a, H ; ' (callcm) plugin-of colonmark, : (call-res) >tempdp resolved gexecute tempdp> drop ; ' (call-res) plugin-of colon-resolve +T has? ec H [IF] +: (pprim) T @ H >signed dup 0< IF $4000 - ELSE + cr ." wrong usage of (prim) " + dup gdiscover IF .ghost ELSE . THEN cr -1 throw THEN + T a, H ; ' (pprim) plugin-of prim, +[ELSE] : (pprim) dup 0< IF $4000 - ELSE cr ." wrong usage of (prim) " dup gdiscover IF .ghost ELSE . THEN cr -1 throw THEN T a, H ; ' (pprim) plugin-of prim, +[THEN] \ if we want this, we have to spilt aconstant \ and constant!! @@ -3002,7 +3013,7 @@ Builder Defer compile: g>body compile lit-perform T A, H ;compile Builder (Field) -compile: g>body T @ H compile lit+ T , H ;compile +compile: g>body T @ H compile lit+ T here H reloff T , H ;compile Builder interpret/compile: compile: does-resolved ;compile