changeset 36:3b0503a67165

Add scripts for building programs via C using d8 rather than a browser
author Mike Pavone <pavone@retrodev.com>
date Tue, 10 Jul 2012 19:22:19 -0700
parents bf5e88f6419d
children a6bf4869fcbe
files compile compiler.js tpc.js
diffstat 3 files changed, 55 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/compile	Tue Jul 10 19:22:19 2012 -0700
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+cname=`basename $1`.c
+
+if test -f "$cname"; then
+	rm "$cname"
+fi
+
+d8 tpc.js -- $1 > $cname
+
+if test ! -s "$cname"; then
+	echo "Compilation to C failed"
+	exit 1
+fi
+
+bin=`echo $1 | sed s/\.tp//`
+shift
+gcc $@ -o $bin $cname runtime/object.c
--- a/compiler.js	Mon Jul 09 21:32:28 2012 -0700
+++ b/compiler.js	Tue Jul 10 19:22:19 2012 -0700
@@ -8,18 +8,22 @@
 {
 	this.names = null;
 	var self = this;
-	get('/src/', function(data) {
-		self.names = {};
-		var fakeEl = newEl("div", {
-			innerHTML: data.response
+	if (typeof window === "object") {
+		get('/src/', function(data) {
+			self.names = {};
+			var fakeEl = newEl("div", {
+				innerHTML: data.response
+			});
+			each(qall('a', fakeEl), function(idx, a) {
+				var tpidx = a.textContent.indexOf('.tp');
+				if (tpidx > -1) {
+					self.names[a.textContent.substr(0, tpidx)] = true;
+				}
+			});
 		});
-		each(qall('a', fakeEl), function(idx, a) {
-			var tpidx = a.textContent.indexOf('.tp');
-			if (tpidx > -1) {
-				self.names[a.textContent.substr(0, tpidx)] = true;
-			}
-		});
-	});
+	} else {
+		this.names = {};
+	}
 }
 topsymbols.prototype.find = function(name) {
 	if (!this.names) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tpc.js	Tue Jul 10 19:22:19 2012 -0700
@@ -0,0 +1,22 @@
+var module = {exports: {}};
+var PEG;
+
+if (arguments.length < 1) {
+	print('usage: d8 tpc.js -- filename');
+	os.exit();
+} else {
+	compileFile(arguments[0]);
+}
+
+function compileFile(filename)
+{
+	var text = read(filename);
+	load('peg.js');
+	PEG = module.exports;
+	load('parser.js');
+	load('compiler.js');
+	load('cbackend.js');
+	var parsed = parser.parse(text);
+	var c = parsed.toCModule();
+	print(c);
+}