diff --git a/basis/smtp/smtp.factor b/basis/smtp/smtp.factor index 26bfea9a13..c17bccf064 100755 --- a/basis/smtp/smtp.factor +++ b/basis/smtp/smtp.factor @@ -8,7 +8,7 @@ calendar.format accessors sets hashtables ; IN: smtp SYMBOL: smtp-domain -SYMBOL: smtp-server "localhost" "smtp" smtp-server set-global +SYMBOL: smtp-server "localhost" 25 smtp-server set-global SYMBOL: smtp-read-timeout 1 minutes smtp-read-timeout set-global SYMBOL: esmtp? t esmtp? set-global diff --git a/build-support/factor.sh b/build-support/factor.sh index c60ab46671..16ab260df5 100755 --- a/build-support/factor.sh +++ b/build-support/factor.sh @@ -102,7 +102,7 @@ set_make() { *) MAKE='make';; esac if ! [[ $MAKE -eq 'gmake' ]] ; then - ensure_program_installed gmake + ensure_program_installed gmake fi } @@ -159,6 +159,7 @@ check_factor_exists() { } find_os() { + if [[ -n $OS ]] ; then return; fi $ECHO "Finding OS..." uname_s=`uname -s` check_ret uname @@ -178,6 +179,7 @@ find_os() { } find_architecture() { + if [[ -n $ARCH ]] ; then return; fi $ECHO "Finding ARCH..." uname_m=`uname -m` check_ret uname @@ -197,7 +199,7 @@ write_test_program() { echo "int main(){printf(\"%d\", 8*sizeof(void*)); return 0; }" >> $C_WORD.c } -find_word_size() { +c_find_word_size() { $ECHO "Finding WORD..." C_WORD=factor-word-size write_test_program @@ -207,6 +209,29 @@ find_word_size() { rm -f $C_WORD* } +intel_macosx_word_size() { + ensure_program_installed sysctl + $ECHO -n "Testing if your Intel Mac supports 64bit binaries..." + sysctl machdep.cpu.extfeatures | grep EM64T >/dev/null + if [[ $? -eq 0 ]] ; then + WORD=32 + $ECHO "yes!" + $ECHO "Defaulting to 32bit for now though..." + else + WORD=32 + $ECHO "no." + fi +} + +find_word_size() { + if [[ -n $WORD ]] ; then return; fi + if [[ $OS == macosx && $ARCH == x86 ]] ; then + intel_macosx_word_size + else + c_find_word_size + fi +} + set_factor_binary() { case $OS in # winnt) FACTOR_BINARY=factor-nt;; @@ -230,15 +255,18 @@ echo_build_info() { $ECHO MAKE=$MAKE } -set_build_info() { +check_os_arch_word() { if ! [[ -n $OS && -n $ARCH && -n $WORD ]] ; then $ECHO "OS: $OS" $ECHO "ARCH: $ARCH" $ECHO "WORD: $WORD" - $ECHO "OS, ARCH, or WORD is empty. Please report this" + $ECHO "OS, ARCH, or WORD is empty. Please report this." exit 5 fi +} +set_build_info() { + check_os_arch_word MAKE_TARGET=$OS-$ARCH-$WORD MAKE_IMAGE_TARGET=$ARCH.$WORD BOOT_IMAGE=boot.$ARCH.$WORD.image @@ -254,15 +282,32 @@ set_build_info() { fi } +parse_build_info() { + ensure_program_installed cut + $ECHO "Parsing make target from command line: $1" + OS=`echo $1 | cut -d '-' -f 1` + ARCH=`echo $1 | cut -d '-' -f 2` + WORD=`echo $1 | cut -d '-' -f 3` + + if [[ $OS == linux && $ARCH == ppc ]] ; then WORD=32; fi + if [[ $OS == linux && $ARCH == arm ]] ; then WORD=32; fi + if [[ $OS == macosx && $ARCH == ppc ]] ; then WORD=32; fi + if [[ $OS == wince && $ARCH == arm ]] ; then WORD=32; fi + + $ECHO "OS=$OS" + $ECHO "ARCH=$ARCH" + $ECHO "WORD=$WORD" +} + find_build_info() { find_os find_architecture find_word_size set_factor_binary set_build_info - set_downloader - set_gcc - set_make + set_downloader + set_gcc + set_make echo_build_info } @@ -415,30 +460,37 @@ make_boot_image() { } install_build_system_apt() { - ensure_program_installed yes - yes | sudo apt-get install sudo libc6-dev libfreetype6-dev libx11-dev xorg-dev glutg3-dev wget git-core git-doc rlwrap gcc make + sudo apt-get --yes install sudo libc6-dev libfreetype6-dev libx11-dev xorg-dev glutg3-dev wget git-core git-doc rlwrap gcc make check_ret sudo } install_build_system_port() { test_program_installed git if [[ $? -ne 1 ]] ; then - ensure_program_installed yes - echo "git not found." - echo "This script requires either git-core or port." - echo "If it fails, install git-core or port and try again." - ensure_program_installed port - echo "Installing git-core with port...this will take awhile." - yes | sudo port install git-core + ensure_program_installed yes + echo "git not found." + echo "This script requires either git-core or port." + echo "If it fails, install git-core or port and try again." + ensure_program_installed port + echo "Installing git-core with port...this will take awhile." + yes | sudo port install git-core fi } usage() { - echo "usage: $0 install|install-x11|install-macosx|self-update|quick-update|update|bootstrap|dlls|net-bootstrap|make-target" + echo "usage: $0 install|install-x11|install-macosx|self-update|quick-update|update|bootstrap|dlls|net-bootstrap|make-target|report [optional-target]" echo "If you are behind a firewall, invoke as:" echo "env GIT_PROTOCOL=http $0 " + echo "" + echo "Example for overriding the default target:" + echo " $0 update macosx-x86-32" } +# -n is nonzero length, -z is zero length +if [[ -n "$2" ]] ; then + parse_build_info $2 +fi + case "$1" in install) install ;; install-x11) install_build_system_apt; install ;; @@ -447,8 +499,9 @@ case "$1" in quick-update) update; refresh_image ;; update) update; update_bootstrap ;; bootstrap) get_config_info; bootstrap ;; + report) find_build_info ;; dlls) get_config_info; maybe_download_dlls;; net-bootstrap) get_config_info; update_boot_images; bootstrap ;; - make-target) ECHO=false; find_build_info; echo $MAKE_TARGET ;; + make-target) ECHO=false; find_build_info; echo $MAKE_TARGET ;; *) usage ;; esac diff --git a/core/sequences/sequences-docs.factor b/core/sequences/sequences-docs.factor index 5c0dbf7985..015e82f2c5 100755 --- a/core/sequences/sequences-docs.factor +++ b/core/sequences/sequences-docs.factor @@ -334,7 +334,7 @@ HELP: if-empty { $values { "seq" sequence } { "quot1" quotation } { "quot2" quotation } } { $description "Makes an implicit check if the sequence is empty. An empty sequence is dropped and " { $snippet "quot1" } " is called. Otherwise, if the sequence has any elements, " { $snippet "quot2" } " is called on it." } { $example - "USING: kernel prettyprint sequences sequences.lib ;" + "USING: kernel prettyprint sequences ;" "{ 1 2 3 } [ \"empty sequence\" ] [ sum ] if-empty ." "6" } ; diff --git a/core/vocabs/loader/loader.factor b/core/vocabs/loader/loader.factor index 44f538d5d9..f48a3d1950 100755 --- a/core/vocabs/loader/loader.factor +++ b/core/vocabs/loader/loader.factor @@ -54,19 +54,19 @@ SYMBOL: load-help? : load-source ( vocab -- vocab ) f over set-vocab-source-loaded? [ vocab-source-path [ parse-file ] [ [ ] ] if* ] keep - t over set-vocab-source-loaded? - [ [ % ] [ call ] if-bootstrapping ] dip ; + t swap set-vocab-source-loaded? + [ % ] [ call ] if-bootstrapping ; : load-docs ( vocab -- vocab ) load-help? get [ f over set-vocab-docs-loaded? [ vocab-docs-path [ ?run-file ] when* ] keep - t over set-vocab-docs-loaded? - ] when ; + t swap set-vocab-docs-loaded? + ] [ drop ] if ; : reload ( name -- ) [ - dup vocab [ load-source load-docs drop ] [ no-vocab ] ?if + dup vocab [ [ load-source ] [ load-docs ] bi ] [ no-vocab ] ?if ] with-compiler-errors ; : require ( vocab -- ) @@ -90,8 +90,8 @@ GENERIC: (load-vocab) ( name -- ) M: vocab (load-vocab) [ - dup vocab-source-loaded? [ load-source ] unless - dup vocab-docs-loaded? [ load-docs ] unless + dup vocab-source-loaded? [ dup load-source ] unless + dup vocab-docs-loaded? [ dup load-docs ] unless drop ] [ [ swap add-to-blacklist ] keep rethrow ] recover ; diff --git a/unfinished/regexp2/parser/parser-tests.factor b/unfinished/regexp2/parser/parser-tests.factor index 9dc7dc7909..6911e8e76d 100644 --- a/unfinished/regexp2/parser/parser-tests.factor +++ b/unfinished/regexp2/parser/parser-tests.factor @@ -31,3 +31,7 @@ IN: regexp2.parser [ ] [ "[a-c]" test-regexp ] unit-test [ ] [ "[^a-c]" test-regexp ] unit-test [ "[^]" test-regexp ] must-fail + +[ ] [ "|b" test-regexp ] unit-test +[ ] [ "b|" test-regexp ] unit-test +[ ] [ "||" test-regexp ] unit-test diff --git a/unfinished/regexp2/parser/parser.factor b/unfinished/regexp2/parser/parser.factor index a970f82aab..fb1bd08bfe 100644 --- a/unfinished/regexp2/parser/parser.factor +++ b/unfinished/regexp2/parser/parser.factor @@ -67,7 +67,7 @@ left-parenthesis pipe caret dash ; : ( obj -- negation ) negation boa ; : ( seq -- concatenation ) >vector get-reversed-regexp [ reverse ] when - concatenation boa ; + [ epsilon ] [ concatenation boa ] if-empty ; : ( seq -- alternation ) >vector alternation boa ; : ( obj -- capture-group ) capture-group boa ; : ( obj -- kleene-star ) kleene-star boa ; diff --git a/unfinished/regexp2/regexp2-tests.factor b/unfinished/regexp2/regexp2-tests.factor index f691c2becf..e77a7a4419 100644 --- a/unfinished/regexp2/regexp2-tests.factor +++ b/unfinished/regexp2/regexp2-tests.factor @@ -14,6 +14,13 @@ IN: regexp2-tests [ t ] [ "c" "a|b|c" matches? ] unit-test [ f ] [ "c" "d|e|f" matches? ] unit-test +[ t ] [ "b" "|b" matches? ] unit-test +[ t ] [ "b" "b|" matches? ] unit-test +[ t ] [ "" "b|" matches? ] unit-test +[ t ] [ "" "b|" matches? ] unit-test +[ f ] [ "" "|" matches? ] unit-test +[ f ] [ "" "|||||||" matches? ] unit-test + [ f ] [ "aa" "a|b|c" matches? ] unit-test [ f ] [ "bb" "a|b|c" matches? ] unit-test [ f ] [ "cc" "a|b|c" matches? ] unit-test