fix objective-c mode load

release
Slava Pestov 2007-12-10 03:35:40 -05:00
parent 9cd0b6437c
commit 2059f6e9a4
1 changed files with 29 additions and 20 deletions

View File

@ -1,6 +1,6 @@
USING: xmode.loader xmode.utilities xmode.rules namespaces USING: xmode.loader xmode.utilities xmode.rules namespaces
strings splitting assocs sequences kernel io.files xml memoize strings splitting assocs sequences kernel io.files xml memoize
words globs ; words globs combinators ;
IN: xmode.catalog IN: xmode.catalog
TUPLE: mode file file-name-glob first-line-glob ; TUPLE: mode file file-name-glob first-line-glob ;
@ -40,18 +40,15 @@ MEMO: (load-mode) ( name -- rule-sets )
"extra/xmode/modes/" swap append "extra/xmode/modes/" swap append
resource-path <file-reader> parse-mode ; resource-path <file-reader> parse-mode ;
DEFER: load-mode
SYMBOL: rule-sets SYMBOL: rule-sets
: get-rule-set ( name -- rules ) : get-rule-set ( name -- rule-sets rules )
dup string? [ "::" split1 [ swap (load-mode) ] [ rule-sets get ] if*
"::" split1 [ swap load-mode ] [ rule-sets get ] if* at tuck at ;
] when ;
: resolve-delegate ( rule -- ) : resolve-delegate ( rule -- )
dup rule-delegate dup dup rule-delegate dup string?
[ get-rule-set swap set-rule-delegate ] [ 2drop ] if ; [ get-rule-set nip swap set-rule-delegate ] [ 2drop ] if ;
: each-rule ( rule-set quot -- ) : each-rule ( rule-set quot -- )
>r rule-set-rules values concat r> each ; inline >r rule-set-rules values concat r> each ; inline
@ -71,24 +68,36 @@ SYMBOL: rule-sets
: resolve-imports ( ruleset -- ) : resolve-imports ( ruleset -- )
dup rule-set-imports [ dup rule-set-imports [
get-rule-set get-rule-set dup [
dup resolve-delegates swap rule-sets [
2dup import-keywords 2dup import-keywords
import-rules import-rules
] with-variable
] [
3drop
] if
] curry* each ; ] curry* each ;
: finalize-rule-set ( ruleset -- ) : finalize-rule-set ( ruleset -- )
dup rule-set-finalized? [ drop ] [ dup rule-set-finalized? {
t over set-rule-set-finalized? { f [
dup resolve-imports 1 over set-rule-set-finalized?
resolve-delegates dup resolve-imports
] if ; dup resolve-delegates
t swap set-rule-set-finalized?
] }
{ t [ drop ] }
{ 1 [ "Mutually recursive rule sets" throw ] }
} case ;
: load-mode ( name -- rule-sets ) : finalize-mode ( rulesets -- )
(load-mode) dup rule-sets [ rule-sets [
dup [ nip finalize-rule-set ] assoc-each dup [ nip finalize-rule-set ] assoc-each
] with-variable ; ] with-variable ;
: load-mode ( name -- rule-sets )
(load-mode) dup finalize-mode ;
: reset-modes ( -- ) : reset-modes ( -- )
\ load-mode "memoize" word-prop clear-assoc ; \ load-mode "memoize" word-prop clear-assoc ;