| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 | 
							- // 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: "*/"
 
-   };
 
- });
 
- });
 
 
  |