Mercurial > repos > tabletprog
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); +}