]> gitweb.factorcode.org Git - factor.git/blob - library/platform/jvm/init.factor
CHAR: notation for literal chars, native parser work
[factor.git] / library / platform / jvm / init.factor
1 ! :folding=indent:collapseFolds=1:
2
3 ! $Id$
4 !
5 ! Copyright (C) 2004 Slava Pestov.
6
7 ! Redistribution and use in source and binary forms, with or without
8 ! modification, are permitted provided that the following conditions are met:
9
10 ! 1. Redistributions of source code must retain the above copyright notice,
11 !    this list of conditions and the following disclaimer.
12
13 ! 2. Redistributions in binary form must reproduce the above copyright notice,
14 !    this list of conditions and the following disclaimer in the documentation
15 !    and/or other materials provided with the distribution.
16
17 ! THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18 ! INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
19 ! FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
20 ! DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 ! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22 ! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23 ! OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 ! WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 ! OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26 ! ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28 IN: init
29 USE: combinators
30 USE: compiler
31 USE: continuations
32 USE: kernel
33 USE: lists
34 USE: interpreter
35 USE: namespaces
36 USE: parser
37 USE: stack
38 USE: stdio
39 USE: streams
40 USE: strings
41
42 : cli-param ( param -- )
43     #! Handle a command-line argument starting with '-' by
44     #! setting that variable to t, or if the argument is
45     #! prefixed with 'no-', setting the variable to f.
46     dup "no-" str-head? dup [
47         f put drop
48     ] [
49         drop t put
50     ] ifte ;
51
52 : cli-arg ( argument -- argument )
53     #! Handle a command-line argument. If the argument was
54     #! consumed, returns f. Otherwise returns the argument.
55     dup [
56         dup "-" str-head? dup [
57             cli-param drop f
58         ] [
59             drop
60         ] ifte
61     ] when ;
62
63 : parse-switches ( args -- args )
64     [ cli-arg ] inject ;
65
66 : run-files ( args -- )
67     [ [ run-file ] when* ] each ;
68
69 : parse-command-line ( args -- )
70     #! Parse command line arguments.
71     "args" get parse-switches run-files ;
72
73 : stdin ( -- stdin )
74     "java.lang.System" "in"  jvar-static-get
75     <ireader> <breader> ;
76
77 : stdout ( -- stdout )
78     "java.lang.System" "out" jvar-static-get <owriter> ;
79
80 : init-stdio ( -- )
81     #! Initialize standard input/output.
82     stdin stdout <char-stream> "stdio" set ;
83
84 : init-environment ( -- )
85     #! Initialize OS-specific constants.
86     "user.home" system-property "~" set
87     "file.separator" system-property "/" set ;
88
89 : run-user-init ( -- )
90     #! Run user init file if it exists
91     "~" get "/" get ".factor-rc" cat3 "init-path" set
92
93     "user-init" get [
94         "init-path" get dup exists? [
95             interactive-run-file
96         ] [
97             drop
98         ] ifte
99     ] when ;
100
101 : boot ( -- )
102     #! The boot word is run by the intepreter when starting from
103     #! an object database.
104
105     ! Some flags are *on* by default, unless user specifies
106     ! -no-<flag> CLI switch
107     t "user-init" set
108     t "compile"   set
109
110     init-stdio
111     init-environment
112     init-search-path
113     init-scratchpad
114     parse-command-line
115     run-user-init
116
117     "compile" get [
118         compile-all
119     ] when
120
121     t "startup-done" set
122     
123     print-banner
124     init-interpreter ;