Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update brnfckr.js #2

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 26 additions & 15 deletions brnfckr.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/*! https://mths.be/brnfckr v0.1.1 by @mathias */
;(function(root) {
'use strict';

// Detect free variables `exports`
var freeExports = typeof exports == 'object' && exports;
Expand All @@ -10,16 +11,28 @@

// Detect free variable `global` and use it as `root`
var freeGlobal = typeof global == 'object' && global;
if (freeGlobal.global === freeGlobal) {
if (freeGlobal.global === freeGlobal)
root = freeGlobal;
}

/*--------------------------------------------------------------------------*/

var regexNotBrainfuck = /[^\x2B-\x2E\x3C\x3E\x5B\x5D]/g;
var regexNotBF = /[^\x2B-\x2E\x3C\x3E\x5B\x5D]/g;
// exploit arithmetic mod 256 (byte wrap-around)
var regexUint8Wrap = /\x2B{256}|-{256}/g;
var regexMutualCancel = /(\x2B-)|(-\x2B)|(\x3E\x3C)|(\x3C\x3E)/g;

var minify = function(/**@type {string}*/code) {
code = code
.replace(regexNotBF, '')
.replace(regexUint8Wrap, '');

// this is O(n^2), but it's a temporary "patch"
do {
var len = code.length;
code = code.replace(regexMutualCancel, '');
} while (len != code.length)

var minify = function(code) {
return code.replace(regexNotBrainfuck, '');
return code;
};

/*--------------------------------------------------------------------------*/
Expand All @@ -31,21 +44,19 @@

// Some AMD build optimizers, like r.js, check for specific condition patterns
// like the following:
if (
var isAMD =
typeof define == 'function' &&
typeof define.amd == 'object' &&
define.amd
) {
define(function() {
return brnfckr;
});
} else if (freeExports && !freeExports.nodeType) {
define.amd;
if (isAMD) {
define(function() { return brnfckr });
} else if (freeExports && !freeExports.nodeType) {
if (freeModule) { // in Node.js or RingoJS v0.8.0+
freeModule.exports = brnfckr;
} else { // in Narwhal or RingoJS v0.7.0-
for (var key in brnfckr) {
brnfckr.hasOwnProperty(key) && (freeExports[key] = brnfckr[key]);
}
for (var key in brnfckr)
if (brnfckr.hasOwnProperty(key))
freeExports[key] = brnfckr[key];
}
} else { // in Rhino or a web browser
root.brnfckr = brnfckr;
Expand Down