Skip to content

Commit

Permalink
split up generator
Browse files Browse the repository at this point in the history
  • Loading branch information
kbrsh committed Apr 29, 2018
1 parent 03a0590 commit 1369fd2
Show file tree
Hide file tree
Showing 10 changed files with 66 additions and 61 deletions.
6 changes: 3 additions & 3 deletions dist/moon.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,6 @@
}
};

var mapReduce = function (arr, fn) { return arr.reduce(function (result, current) { return result + fn(current); }, ""); };

var expressionRE = /"[^"]*"|'[^']*'|\d+[a-zA-Z$_]\w*|\.[a-zA-Z$_]\w*|[a-zA-Z$_]\w*:|([a-zA-Z$_]\w*)/g;
var escapeRE = /(?:(?:&(?:amp|gt|lt|nbsp|quot);)|"|\\|\n)/g;
var escapeMap = {
Expand Down Expand Up @@ -206,6 +204,8 @@
return root;
};

var mapReduce = function (arr, fn) { return arr.reduce(function (result, current) { return result + fn(current); }, ""); };

var generateCreate = function (element) {
switch (element.type) {
case "m-fragment":
Expand Down Expand Up @@ -256,7 +256,7 @@
};

var generate = function (tree) {
return new Function(("return [function () {var m = this.m;" + (generateCreate(tree)) + "}, function (root) {var m = this.m;" + (generateMount(tree, "root")) + "}, function () {var m = this.m;" + (tree.dependencies.map(function (dependency) { return ("var " + dependency + " = this.data." + dependency + ";"); })) + (generateUpdate(tree)) + "}]"))();
return new Function(("return [function () {var m = this.m;" + (generateCreate(tree)) + "}, function (root) {var m = this.m;" + (generateMount(tree, "root")) + "}, function () {var m = this.m;" + (mapReduce(tree.dependencies, function (dependency) { return ("var " + dependency + " = this.data." + dependency + ";"); })) + (generateUpdate(tree)) + "}]"))();
};

var compile = function (input) {
Expand Down
2 changes: 1 addition & 1 deletion dist/moon.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/compiler/compiler.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { parse } from "./parser/parser";
import { generate } from "./generator";
import { generate } from "./generator/generator";

export const compile = (input) => {
return generate(parse(input));
Expand Down
54 changes: 0 additions & 54 deletions src/compiler/generator.js

This file was deleted.

17 changes: 17 additions & 0 deletions src/compiler/generator/create.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { mapReduce } from "./util";

export const generateCreate = (element) => {
switch (element.type) {
case "m-fragment":
return mapReduce(element.children, generateCreate);
break;
case "m-expression":
return `m[${element.index}] = m.ct("");`;
break;
case "m-text":
return `m[${element.index}] = m.ct("${element.content}");`;
break;
default:
return `${mapReduce(element.children, generateCreate)}m[${element.index}] = m.ce("${element.type}");`;
}
};
8 changes: 8 additions & 0 deletions src/compiler/generator/generator.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { mapReduce } from "./util";
import { generateCreate } from "./create";
import { generateMount } from "./mount";
import { generateUpdate } from "./update";

export const generate = (tree) => {
return new Function(`return [function () {var m = this.m;${generateCreate(tree)}}, function (root) {var m = this.m;${generateMount(tree, "root")}}, function () {var m = this.m;${mapReduce(tree.dependencies, (dependency) => `var ${dependency} = this.data.${dependency};`)}${generateUpdate(tree)}}]`)();
};
21 changes: 21 additions & 0 deletions src/compiler/generator/mount.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { mapReduce } from "./util";

export const generateMount = (element, parent) => {
let generatedMount = "";

switch (element.type) {
case "m-fragment":
return mapReduce(element.children, (child) => generateMount(child, parent));
break;
default:
const elementPath = `m[${element.index}]`;

if (element.type !== "m-text" && element.type !== "m-expression") {
generatedMount += mapReduce(element.children, (child) => generateMount(child, elementPath));
}

generatedMount += `m.ma(${elementPath}, ${parent});`;
}

return generatedMount;
};
14 changes: 14 additions & 0 deletions src/compiler/generator/update.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { mapReduce } from "./util";

export const generateUpdate = (element) => {
switch (element.type) {
case "m-expression":
return `m.ut(m[${element.index}], ${element.content});`;
break;
case "m-text":
return "";
break;
default:
return mapReduce(element.children, generateUpdate);
}
};
1 change: 1 addition & 0 deletions src/compiler/generator/util.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const mapReduce = (arr, fn) => arr.reduce((result, current) => result + fn(current), "");
2 changes: 0 additions & 2 deletions src/util/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,3 @@ export const error = (message) => {
console.error("[Moon] ERROR: " + message);
}
};

export const mapReduce = (arr, fn) => arr.reduce((result, current) => result + fn(current), "");

0 comments on commit 1369fd2

Please sign in to comment.