summaryrefslogtreecommitdiff
path: root/public/vendor/codemirror/mode/gas/gas.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/vendor/codemirror/mode/gas/gas.js')
-rwxr-xr-xpublic/vendor/codemirror/mode/gas/gas.js345
1 files changed, 345 insertions, 0 deletions
diff --git a/public/vendor/codemirror/mode/gas/gas.js b/public/vendor/codemirror/mode/gas/gas.js
new file mode 100755
index 00000000..0c74bedc
--- /dev/null
+++ b/public/vendor/codemirror/mode/gas/gas.js
@@ -0,0 +1,345 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+"use strict";
+
+CodeMirror.defineMode("gas", function(_config, parserConfig) {
+ 'use strict';
+
+ // If an architecture is specified, its initialization function may
+ // populate this array with custom parsing functions which will be
+ // tried in the event that the standard functions do not find a match.
+ var custom = [];
+
+ // The symbol used to start a line comment changes based on the target
+ // architecture.
+ // If no architecture is pased in "parserConfig" then only multiline
+ // comments will have syntax support.
+ var lineCommentStartSymbol = "";
+
+ // These directives are architecture independent.
+ // Machine specific directives should go in their respective
+ // architecture initialization function.
+ // Reference:
+ // http://sourceware.org/binutils/docs/as/Pseudo-Ops.html#Pseudo-Ops
+ var directives = {
+ ".abort" : "builtin",
+ ".align" : "builtin",
+ ".altmacro" : "builtin",
+ ".ascii" : "builtin",
+ ".asciz" : "builtin",
+ ".balign" : "builtin",
+ ".balignw" : "builtin",
+ ".balignl" : "builtin",
+ ".bundle_align_mode" : "builtin",
+ ".bundle_lock" : "builtin",
+ ".bundle_unlock" : "builtin",
+ ".byte" : "builtin",
+ ".cfi_startproc" : "builtin",
+ ".comm" : "builtin",
+ ".data" : "builtin",
+ ".def" : "builtin",
+ ".desc" : "builtin",
+ ".dim" : "builtin",
+ ".double" : "builtin",
+ ".eject" : "builtin",
+ ".else" : "builtin",
+ ".elseif" : "builtin",
+ ".end" : "builtin",
+ ".endef" : "builtin",
+ ".endfunc" : "builtin",
+ ".endif" : "builtin",
+ ".equ" : "builtin",
+ ".equiv" : "builtin",
+ ".eqv" : "builtin",
+ ".err" : "builtin",
+ ".error" : "builtin",
+ ".exitm" : "builtin",
+ ".extern" : "builtin",
+ ".fail" : "builtin",
+ ".file" : "builtin",
+ ".fill" : "builtin",
+ ".float" : "builtin",
+ ".func" : "builtin",
+ ".global" : "builtin",
+ ".gnu_attribute" : "builtin",
+ ".hidden" : "builtin",
+ ".hword" : "builtin",
+ ".ident" : "builtin",
+ ".if" : "builtin",
+ ".incbin" : "builtin",
+ ".include" : "builtin",
+ ".int" : "builtin",
+ ".internal" : "builtin",
+ ".irp" : "builtin",
+ ".irpc" : "builtin",
+ ".lcomm" : "builtin",
+ ".lflags" : "builtin",
+ ".line" : "builtin",
+ ".linkonce" : "builtin",
+ ".list" : "builtin",
+ ".ln" : "builtin",
+ ".loc" : "builtin",
+ ".loc_mark_labels" : "builtin",
+ ".local" : "builtin",
+ ".long" : "builtin",
+ ".macro" : "builtin",
+ ".mri" : "builtin",
+ ".noaltmacro" : "builtin",
+ ".nolist" : "builtin",
+ ".octa" : "builtin",
+ ".offset" : "builtin",
+ ".org" : "builtin",
+ ".p2align" : "builtin",
+ ".popsection" : "builtin",
+ ".previous" : "builtin",
+ ".print" : "builtin",
+ ".protected" : "builtin",
+ ".psize" : "builtin",
+ ".purgem" : "builtin",
+ ".pushsection" : "builtin",
+ ".quad" : "builtin",
+ ".reloc" : "builtin",
+ ".rept" : "builtin",
+ ".sbttl" : "builtin",
+ ".scl" : "builtin",
+ ".section" : "builtin",
+ ".set" : "builtin",
+ ".short" : "builtin",
+ ".single" : "builtin",
+ ".size" : "builtin",
+ ".skip" : "builtin",
+ ".sleb128" : "builtin",
+ ".space" : "builtin",
+ ".stab" : "builtin",
+ ".string" : "builtin",
+ ".struct" : "builtin",
+ ".subsection" : "builtin",
+ ".symver" : "builtin",
+ ".tag" : "builtin",
+ ".text" : "builtin",
+ ".title" : "builtin",
+ ".type" : "builtin",
+ ".uleb128" : "builtin",
+ ".val" : "builtin",
+ ".version" : "builtin",
+ ".vtable_entry" : "builtin",
+ ".vtable_inherit" : "builtin",
+ ".warning" : "builtin",
+ ".weak" : "builtin",
+ ".weakref" : "builtin",
+ ".word" : "builtin"
+ };
+
+ var registers = {};
+
+ function x86(_parserConfig) {
+ lineCommentStartSymbol = "#";
+
+ registers.ax = "variable";
+ registers.eax = "variable-2";
+ registers.rax = "variable-3";
+
+ registers.bx = "variable";
+ registers.ebx = "variable-2";
+ registers.rbx = "variable-3";
+
+ registers.cx = "variable";
+ registers.ecx = "variable-2";
+ registers.rcx = "variable-3";
+
+ registers.dx = "variable";
+ registers.edx = "variable-2";
+ registers.rdx = "variable-3";
+
+ registers.si = "variable";
+ registers.esi = "variable-2";
+ registers.rsi = "variable-3";
+
+ registers.di = "variable";
+ registers.edi = "variable-2";
+ registers.rdi = "variable-3";
+
+ registers.sp = "variable";
+ registers.esp = "variable-2";
+ registers.rsp = "variable-3";
+
+ registers.bp = "variable";
+ registers.ebp = "variable-2";
+ registers.rbp = "variable-3";
+
+ registers.ip = "variable";
+ registers.eip = "variable-2";
+ registers.rip = "variable-3";
+
+ registers.cs = "keyword";
+ registers.ds = "keyword";
+ registers.ss = "keyword";
+ registers.es = "keyword";
+ registers.fs = "keyword";
+ registers.gs = "keyword";
+ }
+
+ function armv6(_parserConfig) {
+ // Reference:
+ // http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf
+ // http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/DDI0301H_arm1176jzfs_r0p7_trm.pdf
+ lineCommentStartSymbol = "@";
+ directives.syntax = "builtin";
+
+ registers.r0 = "variable";
+ registers.r1 = "variable";
+ registers.r2 = "variable";
+ registers.r3 = "variable";
+ registers.r4 = "variable";
+ registers.r5 = "variable";
+ registers.r6 = "variable";
+ registers.r7 = "variable";
+ registers.r8 = "variable";
+ registers.r9 = "variable";
+ registers.r10 = "variable";
+ registers.r11 = "variable";
+ registers.r12 = "variable";
+
+ registers.sp = "variable-2";
+ registers.lr = "variable-2";
+ registers.pc = "variable-2";
+ registers.r13 = registers.sp;
+ registers.r14 = registers.lr;
+ registers.r15 = registers.pc;
+
+ custom.push(function(ch, stream) {
+ if (ch === '#') {
+ stream.eatWhile(/\w/);
+ return "number";
+ }
+ });
+ }
+
+ var arch = (parserConfig.architecture || "x86").toLowerCase();
+ if (arch === "x86") {
+ x86(parserConfig);
+ } else if (arch === "arm" || arch === "armv6") {
+ armv6(parserConfig);
+ }
+
+ function nextUntilUnescaped(stream, end) {
+ var escaped = false, next;
+ while ((next = stream.next()) != null) {
+ if (next === end && !escaped) {
+ return false;
+ }
+ escaped = !escaped && next === "\\";
+ }
+ return escaped;
+ }
+
+ function clikeComment(stream, state) {
+ var maybeEnd = false, ch;
+ while ((ch = stream.next()) != null) {
+ if (ch === "/" && maybeEnd) {
+ state.tokenize = null;
+ break;
+ }
+ maybeEnd = (ch === "*");
+ }
+ return "comment";
+ }
+
+ return {
+ startState: function() {
+ return {
+ tokenize: null
+ };
+ },
+
+ token: function(stream, state) {
+ if (state.tokenize) {
+ return state.tokenize(stream, state);
+ }
+
+ if (stream.eatSpace()) {
+ return null;
+ }
+
+ var style, cur, ch = stream.next();
+
+ if (ch === "/") {
+ if (stream.eat("*")) {
+ state.tokenize = clikeComment;
+ return clikeComment(stream, state);
+ }
+ }
+
+ if (ch === lineCommentStartSymbol) {
+ stream.skipToEnd();
+ return "comment";
+ }
+
+ if (ch === '"') {
+ nextUntilUnescaped(stream, '"');
+ return "string";
+ }
+
+ if (ch === '.') {
+ stream.eatWhile(/\w/);
+ cur = stream.current().toLowerCase();
+ style = directives[cur];
+ return style || null;
+ }
+
+ if (ch === '=') {
+ stream.eatWhile(/\w/);
+ return "tag";
+ }
+
+ if (ch === '{') {
+ return "braket";
+ }
+
+ if (ch === '}') {
+ return "braket";
+ }
+
+ if (/\d/.test(ch)) {
+ if (ch === "0" && stream.eat("x")) {
+ stream.eatWhile(/[0-9a-fA-F]/);
+ return "number";
+ }
+ stream.eatWhile(/\d/);
+ return "number";
+ }
+
+ if (/\w/.test(ch)) {
+ stream.eatWhile(/\w/);
+ if (stream.eat(":")) {
+ return 'tag';
+ }
+ cur = stream.current().toLowerCase();
+ style = registers[cur];
+ return style || null;
+ }
+
+ for (var i = 0; i < custom.length; i++) {
+ style = custom[i](ch, stream, state);
+ if (style) {
+ return style;
+ }
+ }
+ },
+
+ lineComment: lineCommentStartSymbol,
+ blockCommentStart: "/*",
+ blockCommentEnd: "*/"
+ };
+});
+
+});