# HG changeset patch # User Mike Pavone # Date 1341973339 25200 # Node ID 3b0503a67165fff3552dda3f0f23fa36986e0faf # Parent bf5e88f6419dfd396edc5a29c2b65cf6b3b351c5 Add scripts for building programs via C using d8 rather than a browser diff -r bf5e88f6419d -r 3b0503a67165 compile --- /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 diff -r bf5e88f6419d -r 3b0503a67165 compiler.js --- 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) { diff -r bf5e88f6419d -r 3b0503a67165 tpc.js --- /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); +}