Skip to content

Instantly share code, notes, and snippets.

View yurydelendik's full-sized avatar

Yury Delendik yurydelendik

View GitHub Profile
@yurydelendik
yurydelendik / sqrtOfSqrs.html
Last active July 1, 2016 15:32
sqrt of squares sum
test
<script>
var bin = atob(
"AGFzbQsAAAAEdHlwZYqAgIAAAkABAQEBQAABBAZpbXBvcnSPgICAAAEAA2VudghjYWxsYmFjawhmdW5jdGlvboKAgIAAAQEGbWVtb3J5g4CAgAAICAEGZXhwb3J0jYCAgAABAApzcXJ0T2ZTcXJzBGNvZGW5gICAAAGzgICAAAEBBAESAAAAAAAAAAAVAAIUABAAGAEAEABNBwEBFAAQAC0DABAALQMAi4kVAAYAAA+WDwRuYW1lj4CAgAABDHNxcnRfb2Zfc3FycwA=");
var ar = new Uint8Array(Array.prototype.map.call(bin, (ch) => ch.charCodeAt(0)));
var input = [3, 4];
var env = {env: { callback: (resultPtr) => {
resultPtr |= 0;
if (input.length === 0) return 0|0;
var data = +input.shift();

Using WebAssembly code as JavaScript modules

Simple project structure and dependencies:

# Prepare directory and project
mkdir answer
cd answer
npm init # answer all/most with default values
npm install jspm

We need system.js for magic

@yurydelendik
yurydelendik / parse_code_annotations.diff
Last active May 3, 2016 16:13
SM WASM with debug information
# HG changeset patch
# User Yury Delendik <ydelendik@mozilla.com>
# Date 1462291965 18000
# Tue May 03 11:12:45 2016 -0500
# Node ID 88863f30dd23ebd15831f55b73e0e6df0ec614ae
# Parent 77cead2cd20300623eea2416bc9bce4d5021df09
Parse code annotations
diff --git a/js/src/asmjs/WasmBinary.h b/js/src/asmjs/WasmBinary.h
--- a/js/src/asmjs/WasmBinary.h
@yurydelendik
yurydelendik / hello.c
Created April 25, 2016 18:59
Example of wast with some debug comments
struct z {
int x;
float y;
} i;
int main() {
struct z t[10];
int i, j;
for (i = 0; i < 9; i++)
t[i].x = i;
@yurydelendik
yurydelendik / llvm-dgb-no-virt-v2.diff
Last active June 30, 2016 19:39
llvm debug hack for virtual registers
Index: lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.cpp
===================================================================
--- lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.cpp (revision 270942)
+++ lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.cpp (working copy)
@@ -164,7 +164,7 @@
// Look for register defs and register masks. Register masks are
// typically on calls and they clobber everything not in the mask.
for (const MachineOperand &MO : MI.operands()) {
- if (MO.isReg() && MO.isDef() && MO.getReg()) {
+ if (MO.isReg() && MO.isDef() && TargetRegisterInfo::isPhysicalRegister(MO.getReg())) {
@yurydelendik
yurydelendik / mpc1.html
Last active December 11, 2017 23:22
Minimal example for mozPrintCallback
<!DOCTYPE html>
<html dir="ltr" mozdisallowselectionprint moznomarginboxes>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<style>
* {
padding: 0;
margin: 0;
}
@yurydelendik
yurydelendik / pdfjs_disable_foreigh_origin.diff
Last active January 22, 2016 22:34
Disable foriegn origin file URLs for PDF.js
--- a/web/viewer.js 2016-01-21 12:50:58.000000000 -0600
+++ b/web/viewer.js 2016-01-21 12:51:17.000000000 -0600
@@ -7154,17 +7154,17 @@
function webViewerLoad(evt) {
configure(PDFJS);
PDFViewerApplication.initialize().then(webViewerInitialized);
}
function webViewerInitialized() {
var queryString = document.location.search.substring(1);
@yurydelendik
yurydelendik / pdfjs-divBoundFor.js
Last active October 27, 2017 13:35
PDF.js get text layer divs bounds
function divBoundsFor(pageIndex) {
var page = document.querySelectorAll('.page')[pageIndex];
var textLayer = page && page.querySelector('.textLayer');
if (!textLayer) return null;
var textLayerBounds = textLayer.getBoundingClientRect();
var divs = textLayer.querySelectorAll('div');
var bounds = Array.prototype.map.call(divs, function (d) {
var r = d.getBoundingClientRect();
return {
left: r.left - textLayerBounds.left,
function RedBlackNode(data) {
this.data = data;
this.left = null;
this.right = null;
this.parent = null;
this.red = false;
}
RedBlackNode.prototype = {
next: function () {
var n = this;
function approximateFraction(x) {
// shourtcuts
if (Math.floor(x) === x) {
return [x, 1];
}
var xinv = 1 / x;
if (Math.floor(xinv) === xinv) {
return [1, xinv];
}