Baremetal is now the default build target and therefore has its sources at the top-level. Baremetal programs build using the phase-2 Mu toolchain that requires a Linux kernel. This phase-2 codebase which used to be at the top-level is now under the linux/ directory. Finally, the phase-2 toolchain, while self-hosting, has a way to bootstrap from a C implementation, which is now stored in linux/bootstrap. The bootstrap C implementation uses some literate programming tools that are now in linux/bootstrap/tools. So the whole thing has gotten inverted. Each directory should build one artifact and include the main sources (along with standard library). Tools used for building it are relegated to sub-directories, even though those tools are often useful in their own right, and have had lots of interesting programs written using them. A couple of things have gotten dropped in this process: - I had old ways to run on just a Linux kernel, or with a Soso kernel. No more. - I had some old tooling for running a single test at the cursor. I haven't used that lately. Maybe I'll bring it back one day. The reorg isn't done yet. Still to do: - redo documentation everywhere. All the README files, all other markdown, particularly vocabulary.md. - clean up how-to-run comments at the start of programs everywhere - rethink what to do with the html/ directory. Do we even want to keep supporting it? In spite of these shortcomings, all the scripts at the top-level, linux/ and linux/bootstrap are working. The names of the scripts also feel reasonable. This is a good milestone to take stock at.
77 lines
2.4 KiB
VimL
77 lines
2.4 KiB
VimL
" Vim syntax file
|
|
" Language: mu
|
|
" Maintainer: Kartik Agaram <mu@akkartik.com>
|
|
" URL: http://github.com/akkartik/mu
|
|
" License: public domain
|
|
"
|
|
" Copy this file into your ftplugin directory, and add the following to your
|
|
" vimrc or to .vim/ftdetect/mu.vim:
|
|
" autocmd BufReadPost,BufNewFile *.mu set filetype=mu
|
|
"
|
|
" Some highlight groups you might want to select colors for in your vimrc:
|
|
" muFunction
|
|
" muTest
|
|
|
|
let s:save_cpo = &cpo
|
|
set cpo&vim
|
|
|
|
" todo: why does this periodically lose syntax, like on file reload?
|
|
" $ vim x.mu
|
|
" :e
|
|
"? if exists("b:syntax")
|
|
"? finish
|
|
"? endif
|
|
"? let b:syntax = "mu"
|
|
|
|
setlocal iskeyword=@,48-57,?,!,_,$,-
|
|
setlocal formatoptions-=t " Mu programs have long lines
|
|
setlocal formatoptions+=c " but comments should still wrap
|
|
|
|
syntax match muSalientComment /##.*$/ | highlight link muSalientComment SalientComment
|
|
syntax match muComment /#\( \.\|? \)\@!.*/ | highlight link muComment Comment
|
|
syntax match muS1Comment /# \..*/ | highlight link muS1Comment Comment
|
|
syntax match muS2Comment /# \. \..*/ | highlight link muS2Comment Comment
|
|
|
|
set comments+=n:#
|
|
syntax match muCommentedCode "#? .*" | highlight link muCommentedCode CommentedCode
|
|
let b:cmt_head = "#? "
|
|
|
|
syntax match muDelimiter "[{}]" | highlight link muDelimiter Delimiter
|
|
|
|
" Mu literals
|
|
syntax match muLiteral %\<-\?[0-9][0-9A-Fa-f]*\>%
|
|
syntax match muLiteral %\<-\?0x[0-9A-Fa-f]\+\>%
|
|
syntax match muLiteral %"[^"]*"%
|
|
highlight link muLiteral Constant
|
|
syntax match muError %\<[0-9][0-9A-Fa-f]*[^0-9A-Fa-f]\>%
|
|
highlight link muError Error
|
|
|
|
" sources of action at a distance
|
|
syntax match muAssign "<-"
|
|
highlight link muAssign SpecialChar
|
|
syntax keyword muAssign error
|
|
highlight link muAssign Special
|
|
|
|
" common keywords
|
|
syntax match muControl "\<return\>\|\<return-if[^ ]*\>"
|
|
syntax match muControl "\<jump\>\|\<jump-if[^ ]*"
|
|
syntax match muControl "\<break\>\|\<break-if[^ ]*"
|
|
syntax match muControl "\<loop\>\|\<loop-if[^ ]*"
|
|
highlight link muControl PreProc
|
|
|
|
syntax match muKeyword " -> "
|
|
syntax keyword muKeyword fn sig type var
|
|
highlight link muKeyword PreProc
|
|
|
|
syntax match muFunction "\(fn\s\+\)\@<=\(\S\+\)"
|
|
highlight link muFunction Identifier
|
|
|
|
syntax match muTest "\(fn\s\+\)\@<=\(test-\S\+\)"
|
|
highlight link muTest Identifier
|
|
|
|
syntax match muData "^type\>"
|
|
syntax match muData "\<eax\>\|\<ecx\>\|\<edx\>\|\<ebx\>\|\<esi\>\|\<edi\>\|\<xmm[0-7]\>"
|
|
highlight link muData Constant
|
|
|
|
let &cpo = s:save_cpo
|