Stack comments without -- are a parse-time error now

slava 2006-11-03 02:29:43 +00:00
parent 68973b1a51
commit 6598d373d1
5 changed files with 25 additions and 9 deletions

View File

@ -128,6 +128,9 @@ macosx.dmg:
hdiutil create -srcfolder "$(DISK_IMAGE_DIR)" -fs HFS+ \
-volname "$(DISK_IMAGE_DIR)" "$(DISK_IMAGE)"
tags:
ctags-exuberant vm/*.[chm]
f: $(OBJS)
$(CC) $(LIBS) $(LIBPATH) $(CFLAGS) -o $@$(PLAF_SUFFIX) $(OBJS)

View File

@ -11,7 +11,7 @@ SYMBOL: file
SYMBOL: line-number
SYMBOL: line-text
SYMBOL: column
SYMBOL: column-number
TUPLE: check-vocab name ;
: check-vocab ( name -- vocab )
@ -53,6 +53,6 @@ TUPLE: parse-error file line col text ;
C: parse-error ( msg -- error )
file get over set-parse-error-file
line-number get over set-parse-error-line
column get over set-parse-error-col
column-number get over set-parse-error-col
line-text get over set-parse-error-text
[ set-delegate ] keep ;

View File

@ -11,7 +11,7 @@ USING: alien arrays definitions errors generic
hashtables kernel math modules namespaces parser sequences
strings vectors words ;
: !! line-text get length column set ; parsing
: !! line-text get length column-number set ; parsing
: !#! POSTPONE: ! ; parsing
: !IN: scan set-in ; parsing
: !USE: scan use+ ; parsing

View File

@ -9,7 +9,7 @@ namespaces prettyprint sequences strings vectors words ;
[ drop r> length ] [ r> drop ] if ; inline
: skip-blank ( -- )
column [ line-text get [ blank? not ] skip ] change ;
column-number [ line-text get [ blank? not ] skip ] change ;
: skip-word ( m line -- n )
2dup nth CHAR: " = [ drop 1+ ] [ [ blank? ] skip ] if ;
@ -19,7 +19,7 @@ namespaces prettyprint sequences strings vectors words ;
: scan ( -- token )
skip-blank
column [ line-text get (scan) dup ] change
column-number [ line-text get (scan) dup ] change
2dup = [ 2drop f ] [ line-text get subseq ] if ;
: CREATE ( -- word ) scan create-in ;
@ -55,7 +55,10 @@ TUPLE: no-word name ;
dup parsing? [ execute ] [ parsed ] if parse-loop
] when* ;
: (parse) ( str -- ) line-text set 0 column set parse-loop ;
: (parse) ( str -- )
line-text set
0 column-number set
parse-loop ;
TUPLE: bad-escape ;
: bad-escape ( -- * ) <bad-escape> throw ;
@ -88,7 +91,7 @@ TUPLE: bad-escape ;
[ drop 1+ ] [ [ next-char , ] keep (parse-string) ] if ;
: parse-string ( -- str )
column
column-number
[ [ line-text get (parse-string) ] "" make swap ] change ;
: (parse-effect) ( -- )
@ -98,9 +101,17 @@ TUPLE: bad-escape ;
"Unexpected EOL" throw
] if* ;
: string>effect ( seq -- effect )
{ "--" } split1 dup [
<effect>
] [
"Stack effect declaration must contain --" throw
] if ;
: parse-effect ( -- effect )
[ (parse-effect) column get ] { } make swap column set
{ "--" } split1 <effect> ;
[ (parse-effect) column-number get ] { } make
swap column-number set
string>effect ;
: parse-base ( parsed base -- parsed ) scan swap base> parsed ;

View File

@ -81,3 +81,5 @@ unit-test
! Funny bug
[ 2 ] [ "IN: temporary : \0. 2 ; \0." eval ] unit-test
[ "IN: temporary : missing-- ( a b ) ;" eval ] unit-test-fails