recompiling with latest jison (modified) and passing codenode generation

This commit is contained in:
Jeremy Ashkenas
2010-02-12 13:35:34 -05:00
parent 3f765c356a
commit 12859e575a
6 changed files with 26 additions and 40 deletions

View File

@@ -564,7 +564,7 @@
// Save the parser to a file.
// puts parser.generate()
posix = require('posix');
posix.open('parser.js', process.O_CREAT | process.O_WRONLY, 0755).addCallback(function(fd) {
posix.open('lib/coffee_script/parser.js', process.O_CREAT | process.O_WRONLY, 0755).addCallback(function(fd) {
return posix.write(fd, parser.generate());
});
})();

View File

@@ -847,7 +847,7 @@
return this;
},
compile_node: function compile_node(o) {
var __a, __b, code, func, inner, name_part, param, shared_scope, splat, top;
var __a, __b, __c, __d, __e, code, func, inner, name_part, param, params, shared_scope, splat, top;
shared_scope = del(o, 'shared_scope');
top = del(o, 'top');
o.scope = shared_scope || new Scope(o.scope, this.body, this);
@@ -861,14 +861,22 @@
splat.index = this.params.length;
this.body.unshift(splat);
}
__a = this.params;
for (__b = 0; __b < __a.length; __b++) {
param = __a[__b];
params = ((function() {
__a = []; __b = this.params;
for (__c = 0; __c < __b.length; __c++) {
param = __b[__c];
__a.push(param.compile(o));
}
return __a;
}).call(this));
__d = params;
for (__e = 0; __e < __d.length; __e++) {
param = __d[__e];
(o.scope.parameter(param));
}
code = this.body.expressions.length ? '\n' + this.body.compile_with_declarations(o) + '\n' : '';
name_part = this.name ? ' ' + this.name : '';
func = 'function' + (this.bound ? '' : name_part) + '(' + this.params.join(', ') + ') {' + code + this.idt(this.bound ? 1 : 0) + '}';
func = 'function' + (this.bound ? '' : name_part) + '(' + params.join(', ') + ') {' + code + this.idt(this.bound ? 1 : 0) + '}';
if (top && !this.bound) {
func = '(' + func + ')';
}

View File

@@ -209,7 +209,7 @@ case 99:this.$ = [$$[$0-1+1-1]];
break;
case 100:this.$ = $$[$0-3+1-1].concat([$$[$0-3+3-1]]);
break;
case 101:this.$ = yytext;
case 101:this.$ = new LiteralNode(yytext);
break;
case 102:this.$ = new SplatNode($$[$0-4+1-1]);
break;
@@ -436,8 +436,6 @@ parse: function parse(input) {
var symbol, state, action, a, r, yyval={},p,len,ip=0,newState, expected;
symbol = lex();
while (true) {
// this.trace('stack:',JSON.stringify(stack), '\n\t\t\tinput:', this.lexer._input);
// this.trace('vstack:',JSON.stringify(vstack));
// set first input
state = stack[stack.length-1];
// read action for current state and first input
@@ -448,13 +446,11 @@ parse: function parse(input) {
for (p in table[state]) if (this.terminals_[p] && p != 1) {
expected.push("'"+this.terminals_[p]+"'");
}
self.trace("stack:",JSON.stringify(stack), 'symbol:',symbol, 'input', this.lexer.upcomingInput());
if (this.lexer.upcomingInput) self.trace('input', this.lexer.upcomingInput());
parseError('Parse error on line '+(yylineno+1)+'. Expecting: '+expected.join(', ')+"\n"+(this.lexer.showPosition && this.lexer.showPosition()),
{text: this.lexer.match, token: symbol, line: this.lexer.yylineno});
}
// this.trace('action:',action);
this.trace('action:',action);
// this shouldn't happen, unless resolve defaults are off
if (action.length > 1) {
@@ -481,7 +477,6 @@ parse: function parse(input) {
reductions++;
len = this.productions_[a[1]][1];
// this.trace('reduce by: ', this.productions ? this.productions[a[1]] : a[1]);
// perform semantic action
yyval.$ = vstack[vstack.length-len]; // default to $$ = $1
@@ -491,11 +486,8 @@ parse: function parse(input) {
return r;
}
// this.trace('yyval=',JSON.stringify(yyval.$));
// pop off stack
if (len) {
// this.trace('production length:',len);
stack = stack.slice(0,-1*len*2);
vstack = vstack.slice(0, -1*len);
}
@@ -509,10 +501,8 @@ parse: function parse(input) {
case 3: // accept
// this.trace('stack:',stack, '\n\tinput:', this.lexer._input);
// this.trace('vstack:',JSON.stringify(vstack));
// this.trace('Total reductions:', reductions);
// this.trace('Total shifts:', shifts);
this.reductionCount = reductions;
this.shiftCount = shifts;
return true;
}