Index: tools/vscode/uwaterloo.cforall-0.1.0/syntaxes/cfa.tmLanguage.json
===================================================================
--- tools/vscode/uwaterloo.cforall-0.1.0/syntaxes/cfa.tmLanguage.json	(revision a768220035832b529ae9bece1cc40c750a135490)
+++ tools/vscode/uwaterloo.cforall-0.1.0/syntaxes/cfa.tmLanguage.json	(revision 622b8acf9a4c49afb350ae789dff3137bfa736ce)
@@ -5,117 +5,9 @@
 		{ "include": "#preprocessor"},
 		{ "include": "#extern"},
-		{ "include": "#test"}
+		{ "include": "#declaration"},
+		{ "include": "#constant"},
+		{ "include": "#operators"}
 	],
 	"repository": {
-		"directive.punctuation": {
-			"match": "#",
-			"name": "punctuation.definition.directive.cfa"
-		},
-		"directive.pragma": {
-			"name": "meta.preprocessor.pragma.cfa",
-			"match": "^\\s*(#\\s*pragma)\\s+(((?!//|/\\*).)*)",
-			"captures":{
-				"1": {
-					"name": "keyword.control.directive.pragma.cfa",
-					"patterns":[{ "include": "#directive.punctuation"} ]
-				},
-				"2": {"name": "keyword.control.directive.pragma.argument.cfa"}
-			}
-		},
-		"directive.include.string": {
-			"begin": "<|\"",
-			"end": ">|\"",
-			"beginCaptures": {
-				"0": { "name": "punctuation.definition.string.begin.cfa" }
-			},
-			"endCaptures": {
-				"0": { "name": "punctuation.definition.string.end.cfa" }
-			},
-			"name": "string.quoted.include.cfa"
-		},
-		"directive.include": {
-			"name": "meta.preprocessor.include.cfa",
-			"match": "^\\s*(#\\s*include)\\s+(<.*>|\".*\")",
-			"captures": {
-				"1": {
-					"name": "keyword.control.directive.include.cfa",
-					"patterns":[{ "include": "#directive.punctuation"} ]
-				},
-				"2": {"patterns": [{ "include": "#directive.include.string"}]}
-			}
-		},
-		"directive.macro.name": {
-			"name": "entity.name.function.preprocessor.cfa",
-			"match": "[A-z0-9_]+"
-		},
-		"directive.define": {
-			"name": "meta.preprocessor.macro.cfa",
-			"match": "^\\s*(#\\s*define)\\s+([A-z0-9_]+)(\\(.*\\))?\\s+(.*)?",
-			"captures": {
-				"1": {
-					"name": "keyword.control.directive.define.cfa",
-					"patterns":[{ "include": "#directive.punctuation"} ]
-				},
-				"2": {"patterns": [{ "include": "#directive.macro.name"}]},
-				"3": {"name":"meta.define.C"},
-				"4": {"name":"meta.define.D"}
-			}
-		},
-		"directive.undef": {
-			"name": "meta.preprocessor.macro.cfa",
-			"match": "^\\s*(#\\s*undef)\\s+([A-z0-9_]+)",
-			"captures": {
-				"1": {
-					"name": "keyword.control.directive.undef.cfa",
-					"patterns":[{ "include": "#directive.punctuation"} ]
-				},
-				"2": {"name":"meta.define.B", "patterns": [{ "include": "#directive.macro.name"}]}
-			}
-		},
-		"directive.isdef": {
-			"match": "(defined)\\s*\\(\\s*([A-z0-9_]+)\\s*\\)",
-			"captures": {
-				"1": {
-					"name": "keyword.control.directive.conditional.cfa",
-					"match": "defined"
-				},
-				"2": {"patterns": [{ "include": "#directive.macro.name"}]}
-			}
-		},
-		"directive.ifdef": {
-			"name": "meta.preprocessor.cfa",
-			"match": "^\\s*(#\\s*ifdef)\\s+([A-z0-9_]+)",
-			"captures": {
-				"1": {
-					"name": "keyword.control.directive.conditional.cfa",
-					"patterns":[{ "include": "#directive.punctuation"} ]
-				},
-				"2": {"patterns": [{ "include": "#directive.macro.name"}]}
-			}
-		},
-		"directive.condition.arg": {
-			"name": "meta.preprocessor.cfa",
-			"match": "^\\s*(#\\s*if|#\\s*elif)\\s+(.*)",
-			"captures": {
-				"1": {
-					"name": "keyword.control.directive.conditional.cfa",
-					"patterns":[{ "include": "#directive.punctuation"} ]
-				},
-				"2": {"patterns":[
-					{ "include": "#expression"},
-					{ "include": "#directive.isdef"}
-				]}
-			}
-		},
-		"directive.condition.noargs": {
-			"name": "meta.preprocessor.cfa",
-			"match": "^\\s*(#\\s*endif|#\\s*else)\\s+",
-			"captures": {
-				"1": {
-					"name": "keyword.control.directive.conditional.cfa",
-					"patterns":[{ "include": "#directive.punctuation"} ]
-				}
-			}
-		},
 		"preprocessor": {
 			"patterns":[
@@ -127,22 +19,116 @@
 				{ "include": "#directive.condition.arg" },
 				{ "include": "#directive.condition.noargs" }
-			]
-		},
-		"comments.line":{
-			"name": "comment.line.double-slash.cfa",
-			"match": "(\/\/).*",
-			"captures": {
-				"1": {"name": "punctuation.definition.comment.c", "match": "\/\/"}
-			}
-		},
-		"comments.block":{
-			"name": "comment.block.cfa",
-			"begin": "/\\*",
-			"end": "\\*/",
-			"beginCaptures": {
-				"0": { "name": "punctuation.definition.comment.begin.cfa" }
-			},
-			"endCaptures": {
-				"0": { "name": "punctuation.definition.comment.end.cfa" }
+			],
+			"repository": {
+				"directive.punctuation": {
+					"match": "#",
+					"name": "punctuation.definition.directive.cfa"
+				},
+				"directive.pragma": {
+					"name": "meta.preprocessor.pragma.cfa",
+					"match": "^\\s*(#\\s*pragma)\\s+(((?!//|/\\*).)*)",
+					"captures":{
+						"1": {
+							"name": "keyword.control.directive.pragma.cfa",
+							"patterns":[{ "include": "#directive.punctuation"} ]
+						},
+						"2": {"name": "keyword.control.directive.pragma.argument.cfa"}
+					}
+				},
+				"directive.include.string": {
+					"begin": "<|\"",
+					"end": ">|\"",
+					"beginCaptures": {
+						"0": { "name": "punctuation.definition.string.begin.cfa" }
+					},
+					"endCaptures": {
+						"0": { "name": "punctuation.definition.string.end.cfa" }
+					},
+					"name": "string.quoted.include.cfa"
+				},
+				"directive.include": {
+					"name": "meta.preprocessor.include.cfa",
+					"match": "^\\s*(#\\s*include)\\s+(<.*>|\".*\")",
+					"captures": {
+						"1": {
+							"name": "keyword.control.directive.include.cfa",
+							"patterns":[{ "include": "#directive.punctuation"} ]
+						},
+						"2": {"patterns": [{ "include": "#directive.include.string"}]}
+					}
+				},
+				"directive.macro.name": {
+					"name": "entity.name.function.preprocessor.cfa",
+					"match": "[A-z0-9_]+"
+				},
+				"directive.define": {
+					"name": "meta.preprocessor.macro.cfa",
+					"match": "(#\\s*define)\\s+([A-z0-9_]+)(\\(.*\\))?\\s+(.*)?",
+					"captures": {
+						"1": {
+							"name": "keyword.control.directive.define.cfa",
+							"patterns":[{ "include": "#directive.punctuation"} ]
+						},
+						"2": {"patterns": [{ "include": "#directive.macro.name"}]},
+						"3": {"name":"meta.preprocessor.macro.args.cfa"},
+						"4": {"name":"meta.preprocessor.macro.definition.cfa", "patterns": [{ "include": "$self" }]}
+					}
+				},
+				"directive.undef": {
+					"name": "meta.preprocessor.macro.cfa",
+					"match": "^\\s*(#\\s*undef)\\s+(\\w+)",
+					"captures": {
+						"1": {
+							"name": "keyword.control.directive.undef.cfa",
+							"patterns":[{ "include": "#directive.punctuation"} ]
+						},
+						"2": {"name":"meta.define.B", "patterns": [{ "include": "#directive.macro.name"}]}
+					}
+				},
+				"directive.isdef": {
+					"match": "(defined)\\s*\\(\\s*(\\w+)\\s*\\)",
+					"captures": {
+						"1": {
+							"name": "keyword.control.directive.conditional.cfa",
+							"match": "defined"
+						},
+						"2": {"patterns": [{ "include": "#directive.macro.name"}]}
+					}
+				},
+				"directive.ifdef": {
+					"name": "meta.preprocessor.cfa",
+					"match": "^\\s*(#\\s*ifdef)\\s+(\\w+)",
+					"captures": {
+						"1": {
+							"name": "keyword.control.directive.conditional.cfa",
+							"patterns":[{ "include": "#directive.punctuation"} ]
+						},
+						"2": {"patterns": [{ "include": "#directive.macro.name"}]}
+					}
+				},
+				"directive.condition.arg": {
+					"name": "meta.preprocessor.cfa",
+					"match": "^\\s*(#\\s*if|#\\s*elif)\\s+(.*)",
+					"captures": {
+						"1": {
+							"name": "keyword.control.directive.conditional.cfa",
+							"patterns":[{ "include": "#directive.punctuation"} ]
+						},
+						"2": {"patterns":[
+							{ "include": "#expression"},
+							{ "include": "#directive.isdef"}
+						]}
+					}
+				},
+				"directive.condition.noargs": {
+					"name": "meta.preprocessor.cfa",
+					"match": "^\\s*(#\\s*endif|#\\s*else)\\s+",
+					"captures": {
+						"1": {
+							"name": "keyword.control.directive.conditional.cfa",
+							"patterns":[{ "include": "#directive.punctuation"} ]
+						}
+					}
+				}
 			}
 		},
@@ -151,37 +137,129 @@
 				{ "include": "#comments.line"},
 				{ "include": "#comments.block"}
+			],
+			"repository": {
+				"comments.line":{
+					"name": "comment.line.double-slash.cfa",
+					"match": "(\/\/).*",
+					"captures": {
+						"1": {"name": "punctuation.definition.comment.c", "match": "\/\/"}
+					}
+				},
+				"comments.block":{
+					"name": "comment.block.cfa",
+					"begin": "/\\*",
+					"end": "\\*/",
+					"beginCaptures": {
+						"0": { "name": "punctuation.definition.comment.begin.cfa" }
+					},
+					"endCaptures": {
+						"0": { "name": "punctuation.definition.comment.end.cfa" }
+					}
+				}
+			}
+		},
+		"extern": {
+			"patterns": [{ "include": "#extern.block"}],
+			"repository": {
+				"extern.head.string": {
+					"begin": "\"",
+					"end": "\"",
+					"beginCaptures": {
+						"0": { "name": "punctuation.definition.string.begin.cfa" }
+					},
+					"endCaptures": {
+						"0": { "name": "punctuation.definition.string.end.cfa" }
+					},
+					"name": "string.quoted.extern.cfa"
+				},
+				"extern.head": {
+					"match": "(extern)\\s+(.*)\\s+(\\{)",
+					"captures": {
+						"1": { "name": "storage.modifier.cfa" },
+						"2": { "patterns":[{ "include": "#extern.head.string"}] },
+						"3": { "name": "punctuation.section.block.begin.bracket.curly.extern.cfa" }
+					}
+				},
+				"extern.block": {
+					"name": "meta.block.extern.cfa",
+					"begin": "(extern\\s+.*\\s+\\{)",
+					"end": "(\\})",
+					"beginCaptures": {
+						"0": { "name": "meta.head.extern.cfa", "patterns":[{ "include": "#extern.head" }] }
+					},
+					"endCaptures": {
+						"0": { "name": "punctuation.section.block.end.bracket.curly.extern.cfa" }
+					},
+					"contentName": "meta.body.extern.cfa",
+					"patterns": [{ "include": "$self" }]
+				}
+			}
+		},
+		"declaration": {
+			"patterns": [
+				{"include": "#declaration.type"},
+				{"include": "#declaration.aggregate"}
+			],
+			"repository": {
+				"declaration.type": {
+					"patterns": [
+							{ "match": "\\b(void|bool|char|short|int|long|signed|unsigned|float|double)", "name": "storage.type.built-in.primitive.cfa"},
+							{ "match": "\\b(zero_t|one_t|size_t|ssize_t|intptr_t|uintptr_t|\\$thread|\\$coroutine|\\$generator|\\$monitor)", "name": "storage.type.built-in.cfa"},
+							{ "match": "\\b(extern|static|inline|volatile|const|thread_local)", "name": "storage.modifier.cfa"}
+					]
+				},
+				"declaration.aggregate": {
+					"name": "meta.block.struct.cfa",
+					"begin": "(struct|union|enum|trait|coroutine|generator|monitor|thread)\\s+(\\w+)\\s*(\\{)",
+					"end": "(\\})(\\s+\\w+;)?",
+					"beginCaptures": {
+						"0": { "name": "meta.head.struct.cfa" },
+						"1": { "name": "storage.type.struct.cfa"
+						}
+					},
+					"endCaptures": {
+						"1": { "name": "punctuation.section.block.end.bracket.curly.extern.cfa" }
+					},
+					"contentName": "meta.body.extern.cfa",
+					"patterns": [{ "include": "#declaration" }]
+				}
+			}
+		},
+		"constant": {
+			"patterns": [
+				{"include": "#constant.pointer"},
+				{"include": "#constant.number"},
+				{"include": "#constant.string"}
+			],
+			"repository": {
+				"constant.number": {
+					"patterns":[
+						{"name": "constant.numeric.binary.cfa", "match": "\\b0[b|B][_01\\.e]+(u?(hh|h|z|l\\d+|L\\d+|ll|l)u?)?"},
+						{"name": "constant.numeric.hexadecimal.cfa", "match": "\\b0[x|X][_\\dabcdefABCDEF\\.p]+(u?(hh|h|z|l\\d+|L\\d+|ll|l)u?)?"},
+						{"name": "constant.numeric.octal.cfa", "match": "\\b0[_0-7\\.]+(u?(hh|h|z|l\\d+|L\\d+|ll|l)u?)?"},
+						{"name": "constant.numeric.decimal.cfa", "match": "\\b[\\d\\.][_\\d\\.e\\+]*(u?(hh|h|z|l\\d+|L\\d+|ll|l)u?)?"}
+					]
+				},
+				"constant.pointer": {
+					"patterns":[
+						{"name": "constant.language.binary.cfa", "match": "\\b0[b|B][_01]+p"},
+						{"name": "constant.language.hexadecimal.cfa", "match": "\\b0[x|X][_\\dabcdefABCDEF]+p"},
+						{"name": "constant.language.octal.cfa", "match": "\\b0[_0-7]+p"},
+						{"name": "constant.language.decimal.cfa", "match": "\\b[\\d][_\\d\\.e\\+]*p"}
+					]
+				}
+			}
+		},
+		"operators": {
+			"patterns":[
+				{
+					"name": "keyword.operator.declaration.cfa",
+					"match": "\\?\\[\\?\\]|\\^\\?{}|\\?{}|\\?\\(\\)|\\?\\+\\+|\\?--|\\+\\+\\?|--\\?|\\*\\?|\\+\\?|\\-\\?|\\~\\?|\\!\\?|\\?\\\\=\\?|\\?\\\\\\?|\\?\\*=\\?|\\?\\*\\?|\\?/=\\?|\\?/\\?|\\?%=\\?|\\?%\\?|\\?\\+=\\?|\\?\\+\\?|\\?-=\\?|\\?-\\?|\\?<<=\\?|\\?<<\\?|\\?<=\\?|\\?<\\?|\\?>>=\\?|\\?>>\\?|\\?>=\\?|\\?>\\?|\\?==\\?|\\?\\!=\\?|\\?&=\\?|\\?&\\?|\\?\\^=\\?|\\?\\^\\?|\\?\\|=\\?|\\?\\|\\?|\\?=\\?"
+				},
+				{
+					"name": "keyword.operator.cfa",
+					"match": "\\?|\\+\\+|--|\\~|\\!|\\=|\\\\|\\*=|\\*|/=|/|%=|%|\\+=|\\+|-=|-|<<=|<<|<=|<|>>=|>>|>=|>|==|\\!=|&=|&|\\^=|\\^|\\|=|\\||="
+				}
 			]
-		},
-		"extern.head.string": {
-			"begin": "\"",
-			"end": "\"",
-			"beginCaptures": {
-				"0": { "name": "punctuation.definition.string.begin.cfa" }
-			},
-			"endCaptures": {
-				"0": { "name": "punctuation.definition.string.end.cfa" }
-			},
-			"name": "string.quoted.extern.cfa"
-		},
-		"extern.head": {
-			"match": "(extern)\\s+(.*)\\s+(\\{)",
-			"captures": {
-				"1": { "name": "storage.modifier.cfa" },
-				"2": { "patterns":[{ "include": "#extern.head.string"}] },
-				"3": { "name": "punctuation.section.block.begin.bracket.curly.extern.cfa" }
-			}
-		},
-		"extern": {
-			"name": "meta.block.extern.cfa",
-			"begin": "(extern\\s+.*\\s+\\{)",
-			"end": "(\\})",
-			"beginCaptures": {
-				"0": { "name": "meta.head.extern.cfa", "patterns":[{ "include": "#extern.head" }] }
-			},
-			"endCaptures": {
-				"0": { "name": "punctuation.section.block.end.bracket.curly.extern.cfa" }
-			},
-			"contentName": "meta.body.extern.cfa",
-			"patterns": [{ "include": "$self" }]
 		}
 	}
