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