--- gforth/prim 2012/03/17 23:38:36 1.269 +++ gforth/prim 2012/07/15 12:03:07 1.273 @@ -2026,7 +2026,7 @@ free(string); newline ( -- c_addr u ) gforth ""String containing the newline sequence of the host OS"" -char newline[] = { +static const char newline[] = { #if DIRSEP=='/' /* Unix */ '\n' @@ -2262,7 +2262,7 @@ representation. If the string represents true. Otherwise, @i{flag} is false. A string of blanks is a special case and represents the floating-point number 0."" Float r; -flag = to_float(c_addr, u, &r); +flag = to_float(c_addr, u, &r, '.'); if (flag) { fp--; fp[0]=r; @@ -2359,8 +2359,7 @@ CLOBBER_TOS_WORKAROUND_END; fsincos ( r1 -- r2 r3 ) float-ext f_sine_cos ""@i{r2}=sin(@i{r1}), @i{r3}=cos(@i{r1})"" CLOBBER_TOS_WORKAROUND_START; -r2 = sin(r1); -r3 = cos(r1); +sincos(r1, &r2, &r3); CLOBBER_TOS_WORKAROUND_END; fsqrt ( r1 -- r2 ) float-ext f_square_root @@ -2458,6 +2457,20 @@ faxpy(ra, f_x, nstridex, f_y, nstridey, fdup dup f@ f* over + 2swap dup f@ f+ dup f! over + 2swap LOOP 2drop 2drop fdrop ; +>float1 ( c_addr u c -- f:... flag ) gforth to_float1 +""Actual stack effect: ( c_addr u c -- r t | f ). Attempt to convert the +character string @i{c-addr u} to internal floating-point +representation. If the string represents a valid floating-point number +@i{r} is placed on the floating-point stack and @i{flag} is +true. Otherwise, @i{flag} is false. A string of blanks is a special +case and represents the floating-point number 0."" +Float r; +flag = to_float(c_addr, u, &r, c); +if (flag) { + fp--; + fp[0]=r; +} + \+ \ The following words access machine/OS/installation-dependent @@ -2780,7 +2793,20 @@ ip=IP; SUPER_END; VM_JUMP(EXEC1((Xt)a_addr)); +\+objects +\g object_pointer +>o ( c_addr -- r:c_old ) new to_o +c_old = op; +op = c_addr; + +o> ( r:c_addr -- ) new o_restore +op = c_addr; + +o#+ ( #w -- c_addr ) new o_lit_plus +c_addr = op + w; + +\+ \g static_super ifdef(`STACK_CACHE_FILE',