Add the things

master
GreenXenith 2021-11-06 17:00:25 -07:00
commit b9697f5814
12 changed files with 645 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.vscode/

4
.vscodeignore Normal file
View File

@ -0,0 +1,4 @@
.vscode/**
.vscode-test/**
.gitignore
vsc-extension-quickstart.md

18
LICENSE.txt Normal file
View File

@ -0,0 +1,18 @@
MIT Copyright 2021 GreenXenith
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

9
README.md Normal file
View File

@ -0,0 +1,9 @@
# High Level Assembly Language Support
Language support for [Randall Hyde's](https://www.plantation-productions.com/Webster/HighLevelAsm/index.html) [High Level Assembly](https://en.wikipedia.org/wiki/High_Level_Assembly).
Currently features:
* Syntax highlighting
* Indenting
![screenshot](screenshot.png)

81
extension.js Normal file
View File

@ -0,0 +1,81 @@
// THIS FILE IS NOT CURRENTLY IN USE
// IT IS A WORK IN PROGRESS AND MAY NEVER BE COMPLETED
// package.json:
// "activationEvents": ["*"],
// "main": "extension.js",
const vscode = require("vscode");
const snippets = require("./snippets.json");
// Compiles set of snippets into completion items
const buildCompletionItems = (snippets, insert, kind) => {
const items = [];
for (const snippet of snippets) {
const str = typeof snippet === "string";
const item = new vscode.CompletionItem(str ? snippet : snippet.token);
item.insertText = new vscode.SnippetString((str ? insert : snippet.body)
.replace(/(?<!\$)\$S/, item.label) // $S -> snippet
.replace(/(?<!\$)\$R(\d+?)\-(\d+?)/, (_, s, e) => Array.from({length: +e - +s + 1}, (_, i) => +s + i).join()) // $R#-# -> comma-delim range
.replace("$$", "$")); // $$ -> $
item.kind = kind;
items.push(item);
}
return items;
}
// Include namespaces in builtin snippets
const completions = buildCompletionItems(Object.keys(snippets.namespaces), "$S", vscode.CompletionItemKind.Class);
// Fill in builtin snippets
for (const set of Object.values(snippets.builtin)) {
completions.push(...buildCompletionItems(set.labels, set.body || "$S", vscode.CompletionItemKind[set.kind || "Function"]));
}
// Special snippets (@/#)
const specials = [];
for (const set of Object.values(snippets.special)) {
specials.push(...buildCompletionItems(set.labels, set.body || "$S", vscode.CompletionItemKind[set.kind || "Function"]));
}
const namespaces = {};
// Create namespace snippets
for (const namespace in snippets.namespaces) {
namespaces[namespace] = buildCompletionItems(snippets.namespaces[namespace], "$S($1)$0", vscode.CompletionItemKind.Function);
}
module.exports.activate = (context) => {
const keywordProvider = vscode.languages.registerCompletionItemProvider("hla", {
provideCompletionItems: () => completions,
});
// ???
// @ and # make life difficult
const specialProvider = vscode.languages.registerCompletionItemProvider("hla", {
provideCompletionItems: (document, position) => {
const token = document.lineAt(position).text.substr(0, position.character);
console.log(token);
return specials;
},
}, ["@", "#"]);
const namespaceProvider = vscode.languages.registerCompletionItemProvider("hla", {
provideCompletionItems(document, position) {
const linePrefix = document.lineAt(position).text.substr(0, position.character);
for (const namespace in namespaces) {
if (linePrefix.endsWith(namespace + ".")) {
return namespaces[namespace];
}
}
return undefined;
}
}, ".");
context.subscriptions.push(keywordProvider, specialProvider, namespaceProvider);
}

BIN
icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

135
icon.svg Normal file
View File

@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
sodipodi:docname="icon.svg"
inkscape:version="1.1.1 (1:1.1+202109281949+c3084ef5ed)"
id="svg5"
version="1.1"
viewBox="0 0 1024 1024"
height="1024"
width="1024"
inkscape:export-filename="/home/alex/.vscode-oss/extensions/greenxenith.hla-0.0.1/icon.png"
inkscape:export-xdpi="28.835417"
inkscape:export-ydpi="28.835417"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:document-units="px"
showgrid="false"
units="px"
height="377.95276px"
inkscape:snap-intersection-paths="false"
inkscape:object-nodes="false"
inkscape:zoom="0.43492094"
inkscape:cx="288.55819"
inkscape:cy="466.7515"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1920"
inkscape:window-y="25"
inkscape:window-maximized="1"
inkscape:current-layer="g109340" />
<defs
id="defs2">
<inkscape:path-effect
effect="perspective-envelope"
up_left_point="225.70863,132.62665"
up_right_point="764.24754,210.34986"
down_left_point="164.9444,758.0929"
down_right_point="744.2593,790.46448"
id="path-effect111971"
is_visible="true"
lpeversion="1"
deform_type="perspective"
horizontal_mirror="false"
vertical_mirror="false"
overflow_perspective="false" />
<rect
x="692.96904"
y="600.31761"
width="38.804545"
height="38.758452"
id="rect44111" />
<rect
x="383.95931"
y="311.46152"
width="24.946554"
height="15.767671"
id="rect6699" />
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g109340"
transform="matrix(1.4574813,0,0,1.4574813,-223.26397,-159.22196)">
<g
id="g111807"
transform="translate(26.227596,-13.883546)"
inkscape:path-effect="#path-effect111971">
<g
id="g113045"
transform="translate(19.073326,-66.297001)">
<path
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="M 193.08958,338.35423 288.90849,832.3827 729.02345,745.38732 619.54578,258.51587 213.89425,302.33114 Z"
id="path193"
sodipodi:nodetypes="cccccc"
inkscape:original-d="M 216.74617,289.08481 342.23679,757.42218 758.63335,645.84906 624.43043,144.99695 232.47127,250.02209 Z" />
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="M 226.77797,310.35748 325.98665,814.77437 719.82023,737.60582 614.43566,267.88377 Z"
id="path193-3"
sodipodi:nodetypes="ccccc"
inkscape:original-d="M 244.92054,256.4811 374.22607,739.0559 748.90356,638.66137 619.59803,156.08657 Z" />
<g
aria-label="HLA"
transform="matrix(16.10245,-4.3146383,4.3146383,16.10245,-7263.7383,-2983.9449)"
id="text6697"
style="font-size:13.3333px;line-height:125%;letter-spacing:-0.713822px;word-spacing:0px;white-space:pre;shape-inside:url(#rect6699);stroke-width:1px">
<path
d="m 390.14194,318.52685 1.23093,0.15385 -0.52952,9.2513 -1.24568,-0.12289 0.2543,-4.33703 -3.17744,-0.35254 -0.27219,4.37433 -1.27721,-0.126 0.59797,-9.39335 1.26176,0.15771 -0.2448,3.93411 3.17314,0.36147 z"
style="font-weight:bold;font-family:'Ubuntu Condensed';-inkscape-font-specification:'Ubuntu Condensed, Bold';text-align:center;text-anchor:middle"
id="path111772"
inkscape:original-d="m 392.33315,314.65416 h 1.2 v 9.23998 h -1.2 v -4.29333 h -3.03999 v 4.29333 h -1.2 v -9.23998 h 1.2 v 3.90666 h 3.03999 z" />
<path
d="m 396.64086,327.47757 -0.0519,1.02126 -4.17396,-0.41178 0.51104,-9.21221 1.21169,0.15146 -0.44102,8.15214 z"
style="font-weight:bold;font-family:'Ubuntu Condensed';-inkscape-font-specification:'Ubuntu Condensed, Bold';text-align:center;text-anchor:middle"
id="path111774"
inkscape:original-d="m 399.17929,322.86747 v 1.02667 h -4.11999 v -9.23998 h 1.19999 v 8.21331 z" />
<path
d="m 400.95853,319.87885 c 0.17658,0.66942 0.34851,1.34707 0.51581,2.03301 0.17633,0.67857 0.34256,1.39081 0.49872,2.13688 0.16482,0.74742 0.32351,1.53796 0.47608,2.37181 0.16126,0.83533 0.31976,1.73635 0.47555,2.70333 l -1.16191,-0.11463 c -0.0514,-0.39936 -0.1073,-0.79463 -0.16769,-1.1858 -0.0517,-0.39012 -0.10774,-0.78052 -0.16806,-1.17121 l -2.84648,-0.30009 c -0.10662,0.37646 -0.20458,0.75435 -0.29387,1.13363 -0.0894,0.37977 -0.17913,0.76443 -0.2692,1.15398 l -1.15559,-0.114 c 0.24373,-0.94333 0.4878,-1.81713 0.73224,-2.62188 0.24369,-0.80233 0.4801,-1.55905 0.70932,-2.27051 0.23732,-0.7085 0.47229,-1.38028 0.70494,-2.01559 0.24116,-0.64122 0.48125,-1.27208 0.72028,-1.89265 z m -0.69526,1.23791 c -0.2502,0.69034 -0.49263,1.38802 -0.72727,2.09301 -0.2353,0.70696 -0.46335,1.4343 -0.68413,2.1821 l 2.38662,0.25844 c -0.1377,-0.78209 -0.28905,-1.54777 -0.45407,-2.29719 -0.16496,-0.74908 -0.33867,-1.4945 -0.52115,-2.23636 z"
style="font-weight:bold;font-family:'Ubuntu Condensed';-inkscape-font-specification:'Ubuntu Condensed, Bold';text-align:center;text-anchor:middle"
id="path111776"
inkscape:original-d="m 403.1721,314.65416 c 0.21333,0.66667 0.42222,1.34222 0.62667,2.02666 0.21333,0.67555 0.41777,1.38666 0.61333,2.13333 0.20444,0.74667 0.40444,1.53778 0.6,2.37333 0.20444,0.83555 0.40888,1.73777 0.61333,2.70666 h -1.2 c -0.0711,-0.4 -0.14667,-0.79556 -0.22667,-1.18667 -0.0711,-0.39111 -0.14666,-0.78222 -0.22666,-1.17333 h -2.90666 c -0.0889,0.39111 -0.16889,0.78222 -0.24,1.17333 -0.0711,0.39111 -0.14222,0.78667 -0.21333,1.18667 h -1.16 c 0.19555,-0.96889 0.39555,-1.87111 0.6,-2.70666 0.20444,-0.83555 0.40444,-1.62666 0.6,-2.37333 0.20444,-0.74667 0.40888,-1.45778 0.61333,-2.13333 0.21333,-0.68444 0.42667,-1.35999 0.64,-2.02666 z m -0.65333,1.36 c -0.22222,0.73777 -0.43555,1.47999 -0.64,2.22666 -0.20445,0.74666 -0.4,1.5111 -0.58667,2.29332 h 2.44 c -0.17778,-0.78222 -0.36889,-1.54666 -0.57333,-2.29332 -0.20445,-0.74667 -0.41778,-1.48889 -0.64,-2.22666 z" />
</g>
<g
id="text44109"
style="font-size:13.3333px;line-height:125%;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect44111);stroke-width:1px" />
<g
aria-label="4"
transform="matrix(0.88453247,-0.23700976,0.28263518,1.0548089,0,0)"
id="text45195"
style="font-size:99.2585px;line-height:125%;letter-spacing:0px;word-spacing:0px;stroke-width:7.44441px">
<path
d="m 518.53453,773.72797 -7.52827,-0.48937 -0.46812,8.9855 -10.26747,-0.65255 0.47557,-8.99989 -21.20742,-1.37857 -2.15992,-5.31512 c 3.74952,-5.3188 7.34035,-10.83617 10.77306,-16.55175 3.49457,-5.76621 6.89442,-11.6925 10.19985,-17.77849 l 9.6624,0.6914 1.43012,2.27011 c -4.74919,8.01645 -8.882,14.58048 -12.39394,19.6834 -3.45358,5.11649 -7.08009,9.10633 -10.87949,11.9661 l 15.00113,0.1955 1.75581,-11.16897 9.01282,0.11735 -0.59014,11.32775 7.54457,0.10327 z"
style="font-weight:600;font-family:Yrsa;-inkscape-font-specification:'Yrsa Semi-Bold'"
id="path111933"
inkscape:original-d="m 573.64474,694.92065 h -7.74216 v 9.03253 h -10.52141 v -9.03253 h -21.63835 l -2.48146,-5.16144 q 5.2607,-8.33771 10.02511,-17.27098 4.86366,-9.03252 9.42956,-18.56134 h 9.92585 l 1.58813,2.18369 q -6.65032,12.60583 -11.61324,20.64577 -4.86367,8.03994 -10.42215,12.70509 l 15.28581,-0.79407 1.19111,-11.31547 9.23104,-0.49629 v 11.41472 l 7.74216,-0.39703 z" />
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@ -0,0 +1,38 @@
{
"comments": {
"lineComment": "//",
"blockComment": ["/*", "*/"]
},
"brackets": [
["{", "}"],
["[", "]"],
["(", ")"],
["#(", ")#"],
["#{", "}#"]
],
"autoClosingPairs": [
{"open": "{", "close": "}"},
{"open": "[", "close": "]"},
{"open": "(", "close": ")"},
{"open": "#(", "close": ")#", "notIn": ["string", "comment"]},
{"open": "#{", "close": "}#", "notIn": ["string", "comment"]},
{"open": "\"", "close": "\"", "notIn": ["string"]},
{"open": "'", "close": "'", "notIn": ["string", "comment"]},
{"open": "/*", "close": "*/", "notIn": ["string"]}
],
"surroundingPairs": [
["{", "}"],
["[", "]"],
["(", ")"],
["\"", "\""],
["'", "'"],
["#(", ")#"],
["#{", "}#"],
["/*", "*/"]
],
"indentationRules": {
"increaseIndentPattern": "(?<!\/\/.*)\\b(begin|namespace|forever|for|do|repeat|then|else|switch|case|default|try|anyexception|unprotected|class|record)\\b.*$",
"decreaseIndentPattern": "^\\s*\\b(else|elseif|end(if|for|try)|end|until|case|default|anyexception|unprotected)\\b",
"indentNextLinePattern": "^\\s*\\b(abstract|const|label|proc|static|type|var)\\b"
}
}

38
package.json Normal file
View File

@ -0,0 +1,38 @@
{
"name": "hla",
"displayName": "HLA",
"description": "Language support for Randall Hyde's High Level Assembly.",
"icon": "icon.png",
"version": "1.0.0",
"author": {
"name": "GreenXenith"
},
"publisher": "GreenXenith",
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/GreenXenith/vscode-hla.git"
},
"bugs": {
"url": "https://github.com/GreenXenith/vscode-hla/issues"
},
"engines": {
"vscode": "^1.39.0"
},
"categories": [
"Programming Languages"
],
"contributes": {
"languages": [{
"id": "hla",
"aliases": ["High Level Assembly", "hla"],
"extensions": [".hla", ".hhf"],
"configuration": "./language-configuration.json"
}],
"grammars": [{
"language": "hla",
"scopeName": "source.hla",
"path": "./syntaxes/hla.tmLanguage.json"
}]
}
}

BIN
screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

141
snippets.json Normal file
View File

@ -0,0 +1,141 @@
// THIS FILE IS NOT CURRENTLY IN USE
{
"builtin": {
"keywords": {
"labels": [
"abstract", "align", "anyexception", "begin", "break", "breakif", "call", "case",
"class", "continue", "continueif", "default", "do", "downto", "dup", "else",
"elseif", "end", "endclass", "endconst", "endfor", "endif", "endlabel", "endproc",
"endreadonly", "endrecord", "endstatic", "endstorage", "endswitch", "endtry", "endtype", "endunion",
"endval", "endvar", "endwhile", "enter", "exception", "exit", "exitif", "external",
"f2xml", "felse", "fnclex", "fninit", "fnsave", "fnstcw", "fnstenv", "fnstsw",
"for", "foreach", "forever", "forward", "frstor", "fsave", "fstenv", "haddpd",
"haddps", "hsubpd", "hsubps", "if", "in", "inherits", "iterator", "label",
"lazy", "leave", "method", "monitor", "mwait", "name", "namespace", "overloads",
"override", "overrides", "pause", "proc", "procedure", "program", "raise", "record",
"regex", "repeat", "result", "returns", "segment", "std", "storage", "switch",
"sysenter", "sysexit", "test", "then", "this", "to", "try", "type",
"union", "unit", "unprotected", "until", "verr", "verw", "vmt", "wait",
"welse", "while", "wrmsr"
],
"body": "$S $0",
"kind": "Keyword"
},
"registers": {
"labels": [
"ah", "al", "ax", "eax", "bh", "bl", "ebx", "rbx", "ch", "cl", "cx", "ecx", "rcx", "dh", "dl", "dx", "edx", "rdx",
"si", "esi", "di", "edi", "bp", "ebp", "sp", "esp", "cseg", "dseg", "eseg", "fseg", "gseg", "sseg", "dx:ax", "edx:eax",
{"token": "cr", "body": "$S${1|$R0-7|}$0"}, {"token": "dr", "body": "$S${1|$R0-7|}$0"},
{"token": "mm", "body": "$S${1|$R0-7|}$0"}, {"token": "xmm", "body": "$S${1|$R0-7|}$0"},
{"token": "st", "body": "$S${1|$R0-7|}$0"}
],
"kind": "Keyword"
},
"operators": {
"labels": [
"alignof", "_Alignof", "_Generic", "offsetof", "static_assert", "_Static_assert", "sizeof", "typeof"
],
"body": "$S($1)$0",
"kind": "Function"
},
"types": {
"labels": [
"boolean", "char", "cset", "enum", "string", "wstring", "xstring", "ystring", "zstring", "byte", "tbyte",
"int8", "int16", "int32", "int64", "int128", "uns8", "uns16", "uns32", "uns64", "uns128", "real32", "real64", "real80",
"dword", "qword", "lword", "thunk", "pointer", "const", "readonly", "static", "text", "val", "valres", "var",
"true", "false", "null", "NULL"
],
"kind": "Keyword"
},
"instructions": {
"labels": [
"aaa", "aad", "aam", "aas", "adc", "add", "addpd", "addps", "adds", "addss", "addsubpd", "addsubps", "and", "andnpd", "andnps", "andpd", "andps",
"arpl", "bound", "bsf", "bsr", "bswap", "bt", "btc", "btr", "bts", "cbw", "cdq", "clc", "cld", "clflush", "cli", "clts", "cmc",
"cmova", "cmovae", "cmovb", "cmovbe", "cmovc", "cmove", "cmovg", "cmovge", "cmovl", "cmovle", "cmovna", "cmovnae", "cmovnb", "cmovnbe", "cmovnc", "cmovne", "cmovng",
"cmovnge", "cmovnl", "cmovnle", "cmovno", "cmovnp", "cmovns", "cmovnz", "cmovo", "cmovp", "cmovpe", "cmovpo", "cmovs", "cmovz", "cmp", "cmpeqpd", "cmpeqps", "cmpeqsd",
"cmpeqss", "cmplepd", "cmpleps", "cmplesd", "cmpless", "cmpltpd", "cmpltps", "cmpltsd", "cmpltss", "cmpneqpd", "cmpneqps", "cmpneqsd", "cmpneqss", "cmpnlepd", "cmpnleps", "cmpnlesd",
"cmpnless", "cmpnltpd", "cmpnltps", "cmpnltsd", "cmpnltss", "cmpordpd", "cmpordps", "cmpordsd", "cmpordss", "cmppd", "cmpps", "cmpsb", "cmpsd", "cmpss", "cmpsw", "cmpunordpd",
"cmpunordps", "cmpunordsd", "cmpunordss", "cmpxchg", "cmpxchg8b", "comisd", "comiss", "cpuid", "cvtdq2pd", "cvtdq2ps", "cvtpd2dq", "cvtpd2pi", "cvtpd2ps", "cvtpi2pd", "cvtpi2ps", "cvtps2dq",
"cvtps2pd", "cvtps2pi", "cvtsd2si", "cvtsd2ss", "cvtsi2sd", "cvtsi2ss", "cvtss2sd", "cvtss2si", "cvttpd2dq", "cvttpd2pi", "cvttps2dq", "cvttps2pi", "cvttsd2si", "cvttss2si", "cwd", "cwde",
"daa", "das", "dec", "div", "divpd", "divps", "divsd", "divss", "emms", "fabs", "fadd", "faddp", "fbld", "fbstp", "fchs", "fclex",
"fcmova", "fcmovae", "fcmovb", "fcmovbe", "fcmove", "fcmovna", "fcmovnae", "fcmovnb", "fcmovnbe", "fcmovne", "fcmovnu", "fcmovu", "fcom", "fcomi", "fcomip", "fcomp",
"fcompp", "fcos", "fdecstp", "fdiv", "fdivp", "fdivr", "fdivrp", "ffree", "fiadd", "ficom", "ficomp", "fidiv", "fidivr", "fild", "fimul", "fincstp",
"finit", "fist", "fistp", "fisttp", "fisub", "fisubr", "fld", "fld1", "fldcw", "fldenv", "fldl2e", "fldl2t", "fldlg2", "fldln2", "fldpi", "fldz",
"fmul", "fmulp", "fnop", "fpatan", "fprem", "fprem1", "fptan", "frndint", "fscale", "fsin", "fsincos", "fsqrt", "fst", "fstcw", "fstp", "fstsw",
"fsub", "fsubp", "fsubr", "fsubrp", "ftst", "fucom", "fucomi", "fucomip", "fucomp", "fucompp", "fwait", "fxam", "fxch", "fxrstor", "fxsave", "fxtract",
"fyl2x", "fyl2xp1", "hlt", "idiv", "imod", "imul", "inc", "insb", "insd", "insw", "int", "intmul", "into", "invd", "invlpg", "iret",
"iretd", "ja", "jae", "jb", "jbe", "jc", "jcxz", "je", "jecxz", "jf", "jg", "jge", "jl", "jle", "jmp", "jna",
"jnae", "jnb", "jnbe", "jnc", "jne", "jng", "jnge", "jnl", "jnle", "jno", "jnp", "jns", "jnz", "jo", "jp", "jpe",
"jpo", "js", "jt", "jz", "lahf", "lar", "lddqu", "ldmxcsr", "lds", "lea", "les", "lfence", "lfs", "lgdt", "lgs", "lidt",
"lldt", "lmsw", "lock.adc", "lock.add", "lock.and", "lock.btc", "lock.btr", "lock.bts", "lock.cmpxchg", "lock.dec", "lock.inc", "lock.neg", "lock.not", "lock.or", "lock.sbb", "lock.sub",
"lock.xadd", "lock.xchg", "lock.xor", "lodsb", "lodsd", "lodsw", "loop", "loope", "loopne", "loopnz", "loopz", "lsl", "lss", "ltreg", "maskmovdqu", "maskmovq",
"maxpd", "maxps", "maxsd", "maxss", "mfence", "minpd", "minps", "minsd", "minss", "mod", "mov", "movapd", "movaps", "movd", "movddup", "movdq2q",
"movdqa", "movdqu", "movhlps", "movhpd", "movhps", "movlhps", "movlpd", "movlps", "movmskpd", "movmskps", "movntdq", "movnti", "movntpd", "movntps", "movntq", "movq",
"movq2dq", "movsb", "movsd", "movshdup", "movsldup", "movss", "movsw", "movsx", "movupd", "movups", "movzx", "mul", "mulpd", "mulps", "mulsd", "mulss",
"neg", "nop", "not", "or", "orpd", "orps", "out", "outsb", "outsd", "outsw", "packssdw", "packsswb", "packuswb", "paddb", "paddd", "paddq",
"paddsb", "paddsw", "paddusb", "paddusw", "paddw", "pand", "pandn", "pavgb", "pavgw", "pcmpeqb", "pcmpeqd", "pcmpeqw", "pcmpgtb", "pcmpgtd", "pcmpgtw", "pextrw",
"pinsrw", "pmaddwd", "pmaxsw", "pmaxub", "pminsw", "pminub", "pmovmskb", "pmulhuw", "pmulhw", "pmullw", "pmuludq", "pop", "popa", "popad", "popf", "popfd",
"por", "prefetchnta", "prefetcht0", "prefetcht1", "prefetcht2", "psadbw", "pshufd", "pshufhw", "pshuflw", "pshufw", "pslld", "pslldq", "psllq", "psllw", "psrad", "psraw",
"psrld", "psrldq", "psrlq", "psrlw", "psubb", "psubd", "psubq", "psubsb", "psubsw", "psubusb", "psubusw", "psubw", "punpckhbw", "punpckhdq", "punpckhqdq", "punpckhwd",
"punpcklbw", "punpckldq", "punpcklqdq", "punpcklwd", "push", "pusha", "pushad", "pushd", "pushf", "pushfd", "pushw", "pxor", "rcl", "rcpps", "rcpss", "rcr",
"rdmsr", "rdpmc", "rdtsc", "rep.insb", "rep.insd", "rep.insw", "rep.movsb", "rep.movsd", "rep.movsw", "rep.outsb", "rep.outsd", "rep.outsw", "rep.stosb", "rep.stosd", "rep.stosw", "repe.cmpsb",
"repe.cmpsd", "repe.cmpsw", "repe.scasb", "repe.scasd", "repe.scasw", "repne.cmpsb", "repne.cmpsd", "repne.cmpsw", "repne.scasb", "repne.scasd", "repne.scasw", "repnz.cmpsb", "repnz.cmpsd", "repnz.cmpsw", "repnz.scasb", "repnz.scasd",
"repnz.scasw", "repz.cmpsb", "repz.cmpsd", "repz.cmpsw", "repz.scasb", "repz.scasd", "repz.scasw", "ret", "rol", "ror", "rsm", "rsqrtps", "rsqrtss", "sahf", "sal", "sar",
"sbb", "scasb", "scasd", "scasw", "seta", "setae", "setb", "setbe", "setc", "sete", "setg", "setge", "setl", "setle", "setna", "setnae",
"setnb", "setnbe", "setnc", "setne", "setng", "setnge", "setnl", "setnle", "setno", "setnp", "setns", "setnz", "seto", "setp", "setpe", "setpo",
"sets", "setz", "sfence", "sgdt", "shl", "shld", "shr", "shrd", "shufpd", "shufps", "sidt", "sldt", "smsw", "sqrtpd", "sqrtps", "sqrtsd",
"sqrtss", "stc", "sti", "stmxcsr", "stosb", "stosd", "stosw", "streg", "sub", "subpd", "subps", "subsd", "subss", "ucomisd", "ucomiss", "ud2",
"unpckhpd", "unpckhps", "unpcklpd", "unpcklps", "wbinvd", "xadd", "xchg", "xlat", "xor", "xorpd", "xorps"
],
"body": "$S($1)$0",
"kind": "Function"
}
},
"special": {
"functions": {
"labels": [
"@a", "@abs", "@abstract", "@ae", "@align", "@alignstack", "@arb", "@arity", "@at", "@b", "@baseptype", "@basereg",
"@basetype", "@be", "@boolean", "@bound", "@byte", "@c", "@cdecl", "@ceil", "@char", "@class", "@cos", "@cset",
"@curdir", "@curlex", "@curobject", "@curoffset", "@date", "@debughla", "@defined", "@delete", "@dim", "@display", "@dword", "@e",
"@elements", "@elementsize", "@enter", "@enumsize", "@env", "@eos", "@eval", "@exactlynchar", "@exactlyncset", "@exactlynichar", "@exactlyntomchar", "@exactlyntomcset",
"@exactlyntomichar", "@exceptions", "@exp", "@external", "@extract", "@fast", "@filename", "@firstnchar", "@firstncset", "@firstnichar", "@floor", "@forward",
"@fpureg", "@frame", "@g", "@ge", "@global", "@here", "@index", "@insert", "@int128", "@int16", "@int32", "@int64",
"@int8", "@into", "@isalpha", "@isalphanum", "@isclass", "@isconst", "@isdigit", "@IsExternal", "@isfreg", "@islower", "@ismem", "@isreg",
"@isreg16", "@isreg32", "@isreg8", "@isspace", "@istype", "@isupper", "@isxdigit", "@l", "@label", "@lastobject", "@le", "@leave",
"@length", "@lex", "@linenumber", "@localoffset", "@localsyms", "@log", "@log10", "@lowercase", "@lword", "@match", "@match2", "@matchchar",
"@matchcset", "@matchichar", "@matchid", "@matchintconst", "@matchistr", "@matchiword", "@matchnumericconst", "@matchrealconst", "@matchstr", "@matchstrconst", "@matchtoistr", "@matchtostr",
"@matchword", "@max", "@min", "@mmxreg", "@na", "@nae", "@name", "@nb", "@nbe", "@nc", "@ne", "@ng",
"@nge", "@nl", "@nle", "@no", "@noalignstack", "@nodisplay", "@noenter", "@noframe", "@noleave", "@norlesschar", "@norlesscset", "@norlessichar",
"@normorechar", "@normorecset", "@normoreichar", "@nostackalign", "@nostorage", "@np", "@ns", "@ntomchar", "@ntomcset", "@ntomichar", "@nz", "@o",
"@odd", "@offset", "@onechar", "@onecset", "@oneichar", "@oneormorechar", "@oneormorecset", "@oneormoreichar", "@oneormorews", "@optstrings", "@p", "@parmoffset",
"@parms", "@pascal", "@pclass", "@pe", "@peekchar", "@peekcset", "@peekichar", "@peekistr", "@peekstr", "@peekws", "@po", "@pointer",
"@pos", "@ptype", "@qword", "@random", "@randomize", "@read", "@real128", "@real32", "@real64", "@real80", "@reg", "@reg16",
"@reg32", "@reg8", "@regex", "@returns", "@rindex", "@s", "@section", "@sin", "@size", "@sort", "@sqrt", "@stackalign",
"@staticname", "@stdcall", "@strbrk", "@string", "@strset", "@strspan", "@substr", "@system", "@tab", "@tan", "@tbyte", "@text",
"@thread", "@time", "@tokenize", "@tostring", "@trace", "@trim", "@type", "@typename", "@uns128", "@uns16", "@uns32", "@uns64",
"@uns8", "@uppercase", "@uptochar", "@uptocset", "@uptoichar", "@uptoistr", "@uptostr", "@use", "@volatile", "@wchar", "@word", "@ws",
"@wsoreos", "@wstheneos", "@wstring", "@xmmreg", "@z", "@zeroormorechar", "@zeroormorecset", "@zeroormoreichar", "@zeroormorews", "@zerooronechar", "@zerooronecset", "@zerooroneichar",
"@zstring",
"#append", "#asm", "#closeread", "#closewrite", "#else", "#elseif", "#emit", "#endasm",
"#endfor", "#endif", "#endmacro", "#endmatch", "#endregex", "#endstring", "#endtext", "#endwhile",
"#error", "#for", "#id", "#if", "#include", "#includeonce", "#keyword", "#linker",
"#macro", "#match", "#openread", "#openwrite", "#print", "#regex", "#return", "#rw",
"#string", "#system", "#terminator", "#text", "#while", "#write"
],
"body": "$S($1)$0",
"kind": "Function"
}
},
"namespaces": {
"stdout": [
"put"
]
}
}

View File

@ -0,0 +1,180 @@
{
"$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
"name": "High Level Assembly",
"scopeName": "source.hla",
"patterns": [
{
"include": "#comments"
},
{
"include": "#keywords"
},
{
"include": "#types"
},
{
"include": "#operators"
},
{
"include": "#numbers"
},
{
"include": "#strings"
},
{
"include": "#functions"
},
{
"include": "#x86"
}
],
"repository": {
"comments": {
"patterns": [
{
"name": "comment.line.double-slash.hla",
"match": "\/\/.*"
},
{
"name": "comment.block.hla",
"begin": "(\\/\\*)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.comment.begin.hla"
}
},
"end": "(\\*\\/)",
"endCaptures": {
"1": {
"name": "punctuation.definition.comment.end.hla"
}
}
}
]
},
"keywords": {
"patterns": [
{
"name": "keyword.other.procedure.hla",
"match": "(?<!\\w)(@(?:a|abs|abstract|ae|align|alignstack|arb|arity|at|b|baseptype|basereg|basetype|be|boolean|bound|byte|c|cdecl|ceil|char|class|cos|cset|curdir|curlex|curobject|curoffset|date|debughla|defined|delete|dim|display|dword|e|elements|elementsize|enter|enumsize|env|eos|eval|exactlynchar|exactlyncset|exactlynichar|exactlyntomchar|exactlyntomcset|exactlyntomichar|exceptions|exp|external|extract|fast|filename|firstnchar|firstncset|firstnichar|floor|forward|fpureg|frame|g|ge|global|here|index|insert|int128|int16|int32|int64|int8|into|isalpha|isalphanum|isclass|isconst|isdigit|IsExternal|isfreg|islower|ismem|isreg|isreg16|isreg32|isreg8|isspace|istype|isupper|isxdigit|l|label|lastobject|le|leave|length|lex|linenumber|localoffset|localsyms|log|log10|lowercase|lword|match|match2|matchchar|matchcset|matchichar|matchid|matchintconst|matchistr|matchiword|matchnumericconst|matchrealconst|matchstr|matchstrconst|matchtoistr|matchtostr|matchword|max|min|mmxreg|na|nae|name|nb|nbe|nc|ne|ng|nge|nl|nle|no|noalignstack|nodisplay|noenter|noframe|noleave|norlesschar|norlesscset|norlessichar|normorechar|normorecset|normoreichar|nostackalign|nostorage|np|ns|ntomchar|ntomcset|ntomichar|nz|o|odd|offset|onechar|onecset|oneichar|oneormorechar|oneormorecset|oneormoreichar|oneormorews|optstrings|p|parmoffset|parms|pascal|pclass|pe|peekchar|peekcset|peekichar|peekistr|peekstr|peekws|po|pointer|pos|ptype|qword|random|randomize|read|real128|real32|real64|real80|reg|reg16|reg32|reg8|regex|returns|rindex|s|section|sin|size|sort|sqrt|stackalign|staticname|stdcall|strbrk|string|strset|strspan|substr|system|tab|tan|tbyte|text|thread|time|tokenize|tostring|trace|trim|type|typename|uns128|uns16|uns32|uns64|uns8|uppercase|uptochar|uptocset|uptoichar|uptoistr|uptostr|use|volatile|wchar|word|ws|wsoreos|wstheneos|wstring|xmmreg|z|zeroormorechar|zeroormorecset|zeroormoreichar|zeroormorews|zerooronechar|zerooronecset|zerooroneichar|zstring))(?!\\w)"
},
{
"name": "keyword.other.preprocessor.hla",
"match": "(?<!\\w)(#(?:append|asm|closeread|closewrite|else|elseif|emit|endasm|endfor|endif|endmacro|endmatch|endregex|endstring|endtext|endwhile|error|for|id|if|include|includeonce|keyword|linker|macro|match|openread|openwrite|print|regex|return|rw|string|system|terminator|text|while|write))(?!\\w)"
},
{
"name": "keyword.control.hla",
"match": "(?<!\\w)(abstract|align|anyexception|begin|break|breakif|call|case|class|continue|continueif|default|do|downto|dup|else|elseif|end|endclass|endconst|endfor|endif|endlabel|endproc|endreadonly|endrecord|endstatic|endstorage|endswitch|endtry|endtype|endunion|endval|endvar|endwhile|enter|exception|exit|exitif|external|f2xml|felse|fnclex|fninit|fnsave|fnstcw|fnstenv|fnstsw|for|foreach|forever|forward|frstor|fsave|fstenv|haddpd|haddps|hsubpd|hsubps|if|in|inherits|iterator|label|lazy|leave|method|monitor|mwait|name|namespace|overloads|override|overrides|pause|proc|procedure|program|raise|record|regex|repeat|result|returns|segment|std|storage|switch|sysenter|sysexit|test|then|this|to|try|type|union|unit|unprotected|until|verr|verw|vmt|wait|welse|while|wrmsr)(?!\\w)"
}
]
},
"types": {
"patterns": [
{
"name": "storage.type.hla",
"match": "(?<!\\w)(boolean|char|cset|enum|[w|z]?string|(t)?byte|int(8|16|32|64|128)|uns(8|16|32|64|128)|real(32|64|80)|(d|q|l)?word|thunk|pointer)(?!\\w)"
},
{
"name": "storage.modifier.hla",
"match": "(?<!\\w)(const|readonly|static|text|val|valres|var)(?!\\w)"
},
{
"name": "constant.language.hla",
"match": "(?<!\\w)(true|false|null|NULL)(?!\\w)"
}
]
},
"operators": {
"patterns": [
{
"name": "keyword.operator.hla",
"match": "(?<!\\w)((_A|a)lignof|_Generic|offsetof|(_S|s)tatic_assert|sizeof|typeof)(?!\\w)"
},
{
"name": "keyword.operator.hla",
"match": "[\\*\/+\\-<>=?&|^!@:;]"
}
]
},
"numbers": {
"patterns": [
{
"name": "constant.numeric.hla",
"match": "(?<!\\w)(?:[#uU]?(?:(\\$[0-9a-fA-F_]+)|(%[01_]+)|(\\d[\\d_]*?(?:\\.[\\d_]+?(?:e[+-]\\d+)?)?)))(?!\\w)",
"captures": {
"1": {
"name": "constant.numeric.hexadecimal.hla"
},
"2": {
"name": "constant.numeric.binary.hla"
},
"3": {
"name": "constant.numeric.real.hla"
}
}
}
]
},
"strings": {
"patterns": [
{
"name": "string.quoted.double.hla",
"begin": "\"",
"end": "\"",
"patterns": [
{
"name": "constant.character.escape.hla",
"match": "\\\\."
}
]
},
{
"name": "string.quoted.single.hla",
"begin": "[uU]?'",
"end": "'",
"patterns": [
{
"name": "constant.character.escape.hla",
"match": "\\\\."
}
]
}
]
},
"functions": {
"patterns": [
{
"match": "([a-zA-Z_][\\w_]+)(?=\\([^)]*?\\))",
"captures": {
"1": {
"name": "entity.name.function.hla",
"patterns": [
{
"include": "#keywords"
},
{
"include": "#operators"
},
{
"include": "#x86"
}
]
}
}
}
]
},
"x86": {
"patterns": [
{
"name": "keyword.operator.registers.hla",
"match": "(?<!\\w)((ah|al|ax|eax|rax)|(bh|bl|bx|ebx|rbx)|(ch|cl|cx|ecx|rcx)|(dh|dl|dx|edx|rdx)|(si|esi)|(di|edi)|(bp|ebp)|(sp|esp)|cr[0-7]+|([c-g]|s)seg|dr[0-7]+|dx:ax|edx:eax|[x]?mm[0-7]+|st[0-7]+)(?!\\w)"
},
{
"name": "keyword.operator.instructions.hla",
"match": "(?<!\\w)(aaa|aad|aam|aas|adc|add|addpd|addps|adds|addss|addsubpd|addsubps|and|andnpd|andnps|andpd|andps|arpl|bound|bsf|bsr|bswap|bt|btc|btr|bts|cbw|cdq|clc|cld|clflush|cli|clts|cmc|cmova|cmovae|cmovb|cmovbe|cmovc|cmove|cmovg|cmovge|cmovl|cmovle|cmovna|cmovnae|cmovnb|cmovnbe|cmovnc|cmovne|cmovng|cmovnge|cmovnl|cmovnle|cmovno|cmovnp|cmovns|cmovnz|cmovo|cmovp|cmovpe|cmovpo|cmovs|cmovz|cmp|cmpeqpd|cmpeqps|cmpeqsd|cmpeqss|cmplepd|cmpleps|cmplesd|cmpless|cmpltpd|cmpltps|cmpltsd|cmpltss|cmpneqpd|cmpneqps|cmpneqsd|cmpneqss|cmpnlepd|cmpnleps|cmpnlesd|cmpnless|cmpnltpd|cmpnltps|cmpnltsd|cmpnltss|cmpordpd|cmpordps|cmpordsd|cmpordss|cmppd|cmpps|cmpsb|cmpsd|cmpss|cmpsw|cmpunordpd|cmpunordps|cmpunordsd|cmpunordss|cmpxchg|cmpxchg8b|comisd|comiss|cpuid|cvtdq2pd|cvtdq2ps|cvtpd2dq|cvtpd2pi|cvtpd2ps|cvtpi2pd|cvtpi2ps|cvtps2dq|cvtps2pd|cvtps2pi|cvtsd2si|cvtsd2ss|cvtsi2sd|cvtsi2ss|cvtss2sd|cvtss2si|cvttpd2dq|cvttpd2pi|cvttps2dq|cvttps2pi|cvttsd2si|cvttss2si|cwd|cwde|daa|das|dec|div|divpd|divps|divsd|divss|emms|fabs|fadd|faddp|fbld|fbstp|fchs|fclex|fcmova|fcmovae|fcmovb|fcmovbe|fcmove|fcmovna|fcmovnae|fcmovnb|fcmovnbe|fcmovne|fcmovnu|fcmovu|fcom|fcomi|fcomip|fcomp|fcompp|fcos|fdecstp|fdiv|fdivp|fdivr|fdivrp|ffree|fiadd|ficom|ficomp|fidiv|fidivr|fild|fimul|fincstp|finit|fist|fistp|fisttp|fisub|fisubr|fld|fld1|fldcw|fldenv|fldl2e|fldl2t|fldlg2|fldln2|fldpi|fldz|fmul|fmulp|fnop|fpatan|fprem|fprem1|fptan|frndint|fscale|fsin|fsincos|fsqrt|fst|fstcw|fstp|fstsw|fsub|fsubp|fsubr|fsubrp|ftst|fucom|fucomi|fucomip|fucomp|fucompp|fwait|fxam|fxch|fxrstor|fxsave|fxtract|fyl2x|fyl2xp1|hlt|idiv|imod|imul|inc|insb|insd|insw|int|intmul|into|invd|invlpg|iret|iretd|ja|jae|jb|jbe|jc|jcxz|je|jecxz|jf|jg|jge|jl|jle|jmp|jna|jnae|jnb|jnbe|jnc|jne|jng|jnge|jnl|jnle|jno|jnp|jns|jnz|jo|jp|jpe|jpo|js|jt|jz|lahf|lar|lddqu|ldmxcsr|lds|lea|les|lfence|lfs|lgdt|lgs|lidt|lldt|lmsw|lock.adc|lock.add|lock.and|lock.btc|lock.btr|lock.bts|lock.cmpxchg|lock.dec|lock.inc|lock.neg|lock.not|lock.or|lock.sbb|lock.sub|lock.xadd|lock.xchg|lock.xor|lodsb|lodsd|lodsw|loop|loope|loopne|loopnz|loopz|lsl|lss|ltreg|maskmovdqu|maskmovq|maxpd|maxps|maxsd|maxss|mfence|minpd|minps|minsd|minss|mod|mov|movapd|movaps|movd|movddup|movdq2q|movdqa|movdqu|movhlps|movhpd|movhps|movlhps|movlpd|movlps|movmskpd|movmskps|movntdq|movnti|movntpd|movntps|movntq|movq|movq2dq|movsb|movsd|movshdup|movsldup|movss|movsw|movsx|movupd|movups|movzx|mul|mulpd|mulps|mulsd|mulss|neg|nop|not|or|orpd|orps|out|outsb|outsd|outsw|packssdw|packsswb|packuswb|paddb|paddd|paddq|paddsb|paddsw|paddusb|paddusw|paddw|pand|pandn|pavgb|pavgw|pcmpeqb|pcmpeqd|pcmpeqw|pcmpgtb|pcmpgtd|pcmpgtw|pextrw|pinsrw|pmaddwd|pmaxsw|pmaxub|pminsw|pminub|pmovmskb|pmulhuw|pmulhw|pmullw|pmuludq|pop|popa|popad|popf|popfd|por|prefetchnta|prefetcht0|prefetcht1|prefetcht2|psadbw|pshufd|pshufhw|pshuflw|pshufw|pslld|pslldq|psllq|psllw|psrad|psraw|psrld|psrldq|psrlq|psrlw|psubb|psubd|psubq|psubsb|psubsw|psubusb|psubusw|psubw|punpckhbw|punpckhdq|punpckhqdq|punpckhwd|punpcklbw|punpckldq|punpcklqdq|punpcklwd|push|pusha|pushad|pushd|pushf|pushfd|pushw|pxor|rcl|rcpps|rcpss|rcr|rdmsr|rdpmc|rdtsc|rep.insb|rep.insd|rep.insw|rep.movsb|rep.movsd|rep.movsw|rep.outsb|rep.outsd|rep.outsw|rep.stosb|rep.stosd|rep.stosw|repe.cmpsb|repe.cmpsd|repe.cmpsw|repe.scasb|repe.scasd|repe.scasw|repne.cmpsb|repne.cmpsd|repne.cmpsw|repne.scasb|repne.scasd|repne.scasw|repnz.cmpsb|repnz.cmpsd|repnz.cmpsw|repnz.scasb|repnz.scasd|repnz.scasw|repz.cmpsb|repz.cmpsd|repz.cmpsw|repz.scasb|repz.scasd|repz.scasw|ret|rol|ror|rsm|rsqrtps|rsqrtss|sahf|sal|sar|sbb|scasb|scasd|scasw|seta|setae|setb|setbe|setc|sete|setg|setge|setl|setle|setna|setnae|setnb|setnbe|setnc|setne|setng|setnge|setnl|setnle|setno|setnp|setns|setnz|seto|setp|setpe|setpo|sets|setz|sfence|sgdt|shl|shld|shr|shrd|shufpd|shufps|sidt|sldt|smsw|sqrtpd|sqrtps|sqrtsd|sqrtss|stc|sti|stmxcsr|stosb|stosd|stosw|streg|sub|subpd|subps|subsd|subss|ucomisd|ucomiss|ud2|unpckhpd|unpckhps|unpcklpd|unpcklps|wbinvd|xadd|xchg|xlat|xor|xorpd|xorps)(?!\\w)"
}
]
}
}
}