From 7bc91bf6c67830059252ed42e4e8708449ae0f44 Mon Sep 17 00:00:00 2001 From: satyr Date: Tue, 21 Sep 2010 16:50:32 +0900 Subject: [PATCH] removed global dependency from grammer --- lib/coffee-script.js | 2 +- lib/grammar.js | 1 + lib/parser.js | 260 +++++++++++++++++++-------------------- src/coffee-script.coffee | 3 +- src/grammar.coffee | 1 + 5 files changed, 135 insertions(+), 132 deletions(-) diff --git a/lib/coffee-script.js b/lib/coffee-script.js index 23a91ebc..e95f8b21 100755 --- a/lib/coffee-script.js +++ b/lib/coffee-script.js @@ -5,7 +5,6 @@ Lexer = require('./lexer').Lexer; parser = require('./parser').parser; helpers = require('./helpers').helpers; - helpers.extend(global, require('./nodes')); if (require.extensions) { fs = require('fs'); require.extensions['.coffee'] = function(module, filename) { @@ -73,4 +72,5 @@ return ""; } }; + parser.yy = require('./nodes'); })(); diff --git a/lib/grammar.js b/lib/grammar.js index 01f367c6..00fa9714 100644 --- a/lib/grammar.js +++ b/lib/grammar.js @@ -9,6 +9,7 @@ return [patternString, '$$ = $1;', options]; } action = (match = (action + '').match(unwrap)) ? match[1] : ("(" + (action) + "())"); + action = action.replace(/\b(?:[A-Z][a-z]+Node|Expressions)\b/g, 'yy.$&'); return [patternString, ("$$ = " + (action) + ";"), options]; }; grammar = { diff --git a/lib/parser.js b/lib/parser.js index 97f3e144..561371b5 100755 --- a/lib/parser.js +++ b/lib/parser.js @@ -9,15 +9,15 @@ performAction: function anonymous(yytext,yyleng,yylineno,yy) { var $$ = arguments[5],$0=arguments[5].length; switch(arguments[4]) { -case 1:return this.$ = new Expressions(); +case 1:return this.$ = new yy.Expressions(); break; -case 2:return this.$ = new Expressions(); +case 2:return this.$ = new yy.Expressions(); break; case 3:return this.$ = $$[$0-1+1-1]; break; case 4:return this.$ = $$[$0-2+1-1]; break; -case 5:this.$ = Expressions.wrap([$$[$0-1+1-1]]); +case 5:this.$ = yy.Expressions.wrap([$$[$0-1+1-1]]); break; case 6:this.$ = $$[$0-3+1-1].push($$[$0-3+3-1]); break; @@ -31,11 +31,11 @@ case 10:this.$ = $$[$0-1+1-1]; break; case 11:this.$ = $$[$0-1+1-1]; break; -case 12:this.$ = new LiteralNode($$[$0-1+1-1]); +case 12:this.$ = new yy.LiteralNode($$[$0-1+1-1]); break; -case 13:this.$ = new LiteralNode($$[$0-1+1-1]); +case 13:this.$ = new yy.LiteralNode($$[$0-1+1-1]); break; -case 14:this.$ = new LiteralNode($$[$0-1+1-1]); +case 14:this.$ = new yy.LiteralNode($$[$0-1+1-1]); break; case 15:this.$ = $$[$0-1+1-1]; break; @@ -67,63 +67,63 @@ case 28:this.$ = $$[$0-1+1-1]; break; case 29:this.$ = $$[$0-3+2-1]; break; -case 30:this.$ = new Expressions(); +case 30:this.$ = new yy.Expressions(); break; -case 31:this.$ = Expressions.wrap([$$[$0-2+2-1]]); +case 31:this.$ = yy.Expressions.wrap([$$[$0-2+2-1]]); break; -case 32:this.$ = new LiteralNode($$[$0-1+1-1]); +case 32:this.$ = new yy.LiteralNode($$[$0-1+1-1]); break; -case 33:this.$ = new LiteralNode($$[$0-1+1-1]); +case 33:this.$ = new yy.LiteralNode($$[$0-1+1-1]); break; -case 34:this.$ = new LiteralNode($$[$0-1+1-1]); +case 34:this.$ = new yy.LiteralNode($$[$0-1+1-1]); break; case 35:this.$ = $$[$0-1+1-1]; break; -case 36:this.$ = new LiteralNode($$[$0-1+1-1]); +case 36:this.$ = new yy.LiteralNode($$[$0-1+1-1]); break; -case 37:this.$ = new LiteralNode($$[$0-1+1-1]); +case 37:this.$ = new yy.LiteralNode($$[$0-1+1-1]); break; -case 38:this.$ = new LiteralNode(true); +case 38:this.$ = new yy.LiteralNode(true); break; -case 39:this.$ = new LiteralNode(false); +case 39:this.$ = new yy.LiteralNode(false); break; -case 40:this.$ = new LiteralNode(true); +case 40:this.$ = new yy.LiteralNode(true); break; -case 41:this.$ = new LiteralNode(false); +case 41:this.$ = new yy.LiteralNode(false); break; -case 42:this.$ = new LiteralNode(true); +case 42:this.$ = new yy.LiteralNode(true); break; -case 43:this.$ = new LiteralNode(false); +case 43:this.$ = new yy.LiteralNode(false); break; -case 44:this.$ = new AssignNode($$[$0-3+1-1], $$[$0-3+3-1]); +case 44:this.$ = new yy.AssignNode($$[$0-3+1-1], $$[$0-3+3-1]); break; -case 45:this.$ = new AssignNode($$[$0-5+1-1], $$[$0-5+4-1]); +case 45:this.$ = new yy.AssignNode($$[$0-5+1-1], $$[$0-5+4-1]); break; -case 46:this.$ = new ValueNode($$[$0-1+1-1]); +case 46:this.$ = new yy.ValueNode($$[$0-1+1-1]); break; case 47:this.$ = $$[$0-1+1-1]; break; -case 48:this.$ = new AssignNode(new ValueNode($$[$0-3+1-1]), $$[$0-3+3-1], 'object'); +case 48:this.$ = new yy.AssignNode(new yy.ValueNode($$[$0-3+1-1]), $$[$0-3+3-1], 'object'); break; -case 49:this.$ = new AssignNode(new ValueNode($$[$0-3+1-1]), $$[$0-3+3-1], 'object'); +case 49:this.$ = new yy.AssignNode(new yy.ValueNode($$[$0-3+1-1]), $$[$0-3+3-1], 'object'); break; -case 50:this.$ = new AssignNode(new ValueNode($$[$0-5+1-1]), $$[$0-5+4-1], 'object'); +case 50:this.$ = new yy.AssignNode(new yy.ValueNode($$[$0-5+1-1]), $$[$0-5+4-1], 'object'); break; -case 51:this.$ = new AssignNode(new ValueNode($$[$0-5+1-1]), $$[$0-5+4-1], 'object'); +case 51:this.$ = new yy.AssignNode(new yy.ValueNode($$[$0-5+1-1]), $$[$0-5+4-1], 'object'); break; case 52:this.$ = $$[$0-1+1-1]; break; -case 53:this.$ = new ReturnNode($$[$0-2+2-1]); +case 53:this.$ = new yy.ReturnNode($$[$0-2+2-1]); break; -case 54:this.$ = new ReturnNode(new ValueNode(new LiteralNode('null'))); +case 54:this.$ = new yy.ReturnNode(new yy.ValueNode(new yy.LiteralNode('null'))); break; -case 55:this.$ = new CommentNode($$[$0-1+1-1]); +case 55:this.$ = new yy.CommentNode($$[$0-1+1-1]); break; -case 56:this.$ = new ExistenceNode($$[$0-2+1-1]); +case 56:this.$ = new yy.ExistenceNode($$[$0-2+1-1]); break; -case 57:this.$ = new CodeNode($$[$0-5+2-1], $$[$0-5+5-1], $$[$0-5+4-1]); +case 57:this.$ = new yy.CodeNode($$[$0-5+2-1], $$[$0-5+5-1], $$[$0-5+4-1]); break; -case 58:this.$ = new CodeNode([], $$[$0-2+2-1], $$[$0-2+1-1]); +case 58:this.$ = new yy.CodeNode([], $$[$0-2+2-1], $$[$0-2+1-1]); break; case 59:this.$ = 'func'; break; @@ -139,55 +139,55 @@ case 64:this.$ = [$$[$0-1+1-1]]; break; case 65:this.$ = $$[$0-3+1-1].concat([$$[$0-3+3-1]]); break; -case 66:this.$ = new LiteralNode($$[$0-1+1-1]); +case 66:this.$ = new yy.LiteralNode($$[$0-1+1-1]); break; -case 67:this.$ = new ParamNode($$[$0-2+2-1], true); +case 67:this.$ = new yy.ParamNode($$[$0-2+2-1], true); break; -case 68:this.$ = new ParamNode($$[$0-4+1-1], false, true); +case 68:this.$ = new yy.ParamNode($$[$0-4+1-1], false, true); break; -case 69:this.$ = new ParamNode($$[$0-5+2-1], true, true); +case 69:this.$ = new yy.ParamNode($$[$0-5+2-1], true, true); break; -case 70:this.$ = new SplatNode($$[$0-4+1-1]); +case 70:this.$ = new yy.SplatNode($$[$0-4+1-1]); break; -case 71:this.$ = new ValueNode($$[$0-1+1-1]); +case 71:this.$ = new yy.ValueNode($$[$0-1+1-1]); break; case 72:this.$ = $$[$0-2+1-1].push($$[$0-2+2-1]); break; -case 73:this.$ = new ValueNode($$[$0-2+1-1], [$$[$0-2+2-1]]); +case 73:this.$ = new yy.ValueNode($$[$0-2+1-1], [$$[$0-2+2-1]]); break; case 74:this.$ = $$[$0-1+1-1]; break; case 75:this.$ = $$[$0-1+1-1]; break; -case 76:this.$ = new ValueNode($$[$0-1+1-1]); +case 76:this.$ = new yy.ValueNode($$[$0-1+1-1]); break; -case 77:this.$ = new ValueNode($$[$0-1+1-1]); +case 77:this.$ = new yy.ValueNode($$[$0-1+1-1]); break; case 78:this.$ = $$[$0-1+1-1]; break; -case 79:this.$ = new ValueNode($$[$0-1+1-1]); +case 79:this.$ = new yy.ValueNode($$[$0-1+1-1]); break; -case 80:this.$ = new ValueNode($$[$0-1+1-1]); +case 80:this.$ = new yy.ValueNode($$[$0-1+1-1]); break; -case 81:this.$ = new ValueNode($$[$0-1+1-1]); +case 81:this.$ = new yy.ValueNode($$[$0-1+1-1]); break; case 82:this.$ = $$[$0-1+1-1]; break; -case 83:this.$ = new ValueNode(new LiteralNode('null')); +case 83:this.$ = new yy.ValueNode(new yy.LiteralNode('null')); break; -case 84:this.$ = new AccessorNode($$[$0-2+2-1]); +case 84:this.$ = new yy.AccessorNode($$[$0-2+2-1]); break; -case 85:this.$ = new AccessorNode($$[$0-2+2-1], 'prototype'); +case 85:this.$ = new yy.AccessorNode($$[$0-2+2-1], 'prototype'); break; -case 86:this.$ = new AccessorNode(new LiteralNode('prototype')); +case 86:this.$ = new yy.AccessorNode(new yy.LiteralNode('prototype')); break; -case 87:this.$ = new AccessorNode($$[$0-2+2-1], 'soak'); +case 87:this.$ = new yy.AccessorNode($$[$0-2+2-1], 'soak'); break; case 88:this.$ = $$[$0-1+1-1]; break; -case 89:this.$ = new SliceNode($$[$0-1+1-1]); +case 89:this.$ = new yy.SliceNode($$[$0-1+1-1]); break; -case 90:this.$ = new IndexNode($$[$0-3+2-1]); +case 90:this.$ = new yy.IndexNode($$[$0-3+2-1]); break; case 91:this.$ = (function () { $$[$0-2+2-1].soakNode = true; @@ -199,7 +199,7 @@ case 92:this.$ = (function () { return $$[$0-2+2-1]; }()); break; -case 93:this.$ = new ObjectNode($$[$0-4+2-1]); +case 93:this.$ = new yy.ObjectNode($$[$0-4+2-1]); break; case 94:this.$ = []; break; @@ -211,21 +211,21 @@ case 97:this.$ = $$[$0-4+1-1].concat([$$[$0-4+4-1]]); break; case 98:this.$ = $$[$0-6+1-1].concat($$[$0-6+4-1]); break; -case 99:this.$ = new ClassNode($$[$0-2+2-1]); +case 99:this.$ = new yy.ClassNode($$[$0-2+2-1]); break; -case 100:this.$ = new ClassNode($$[$0-4+2-1], $$[$0-4+4-1]); +case 100:this.$ = new yy.ClassNode($$[$0-4+2-1], $$[$0-4+4-1]); break; -case 101:this.$ = new ClassNode($$[$0-5+2-1], null, $$[$0-5+4-1]); +case 101:this.$ = new yy.ClassNode($$[$0-5+2-1], null, $$[$0-5+4-1]); break; -case 102:this.$ = new ClassNode($$[$0-7+2-1], $$[$0-7+4-1], $$[$0-7+6-1]); +case 102:this.$ = new yy.ClassNode($$[$0-7+2-1], $$[$0-7+4-1], $$[$0-7+6-1]); break; -case 103:this.$ = new ClassNode('__temp__', null, $$[$0-4+3-1]); +case 103:this.$ = new yy.ClassNode('__temp__', null, $$[$0-4+3-1]); break; case 104:this.$ = $$[$0-1+1-1]; break; -case 105:this.$ = new AssignNode(new ValueNode($$[$0-3+1-1]), $$[$0-3+3-1], 'this'); +case 105:this.$ = new yy.AssignNode(new yy.ValueNode($$[$0-3+1-1]), $$[$0-3+3-1], 'this'); break; -case 106:this.$ = new AssignNode(new ValueNode($$[$0-5+1-1]), $$[$0-5+4-1], 'this'); +case 106:this.$ = new yy.AssignNode(new yy.ValueNode($$[$0-5+1-1]), $$[$0-5+4-1], 'this'); break; case 107:this.$ = []; break; @@ -239,17 +239,17 @@ case 111:this.$ = $$[$0-1+1-1]; break; case 112:this.$ = $$[$0-2+2-1].newInstance(); break; -case 113:this.$ = (new CallNode($$[$0-2+2-1], [])).newInstance(); +case 113:this.$ = (new yy.CallNode($$[$0-2+2-1], [])).newInstance(); break; -case 114:this.$ = new ExtendsNode($$[$0-3+1-1], $$[$0-3+3-1]); +case 114:this.$ = new yy.ExtendsNode($$[$0-3+1-1], $$[$0-3+3-1]); break; -case 115:this.$ = new CallNode($$[$0-3+1-1], $$[$0-3+3-1], $$[$0-3+2-1]); +case 115:this.$ = new yy.CallNode($$[$0-3+1-1], $$[$0-3+3-1], $$[$0-3+2-1]); break; -case 116:this.$ = new CallNode($$[$0-3+1-1], $$[$0-3+3-1], $$[$0-3+2-1]); +case 116:this.$ = new yy.CallNode($$[$0-3+1-1], $$[$0-3+3-1], $$[$0-3+2-1]); break; -case 117:this.$ = new CallNode('super', [new SplatNode(new LiteralNode('arguments'))]); +case 117:this.$ = new yy.CallNode('super', [new yy.SplatNode(new yy.LiteralNode('arguments'))]); break; -case 118:this.$ = new CallNode('super', $$[$0-2+2-1]); +case 118:this.$ = new yy.CallNode('super', $$[$0-2+2-1]); break; case 119:this.$ = false; break; @@ -259,27 +259,27 @@ case 121:this.$ = []; break; case 122:this.$ = $$[$0-4+2-1]; break; -case 123:this.$ = new ValueNode(new LiteralNode('this')); +case 123:this.$ = new yy.ValueNode(new yy.LiteralNode('this')); break; -case 124:this.$ = new ValueNode(new LiteralNode('this')); +case 124:this.$ = new yy.ValueNode(new yy.LiteralNode('this')); break; case 125:this.$ = 'inclusive'; break; case 126:this.$ = 'exclusive'; break; -case 127:this.$ = new ValueNode(new LiteralNode('this'), [new AccessorNode($$[$0-2+2-1])]); +case 127:this.$ = new yy.ValueNode(new yy.LiteralNode('this'), [new yy.AccessorNode($$[$0-2+2-1])]); break; -case 128:this.$ = new RangeNode($$[$0-5+2-1], $$[$0-5+4-1], $$[$0-5+3-1]); +case 128:this.$ = new yy.RangeNode($$[$0-5+2-1], $$[$0-5+4-1], $$[$0-5+3-1]); break; -case 129:this.$ = new RangeNode($$[$0-5+2-1], $$[$0-5+4-1], $$[$0-5+3-1]); +case 129:this.$ = new yy.RangeNode($$[$0-5+2-1], $$[$0-5+4-1], $$[$0-5+3-1]); break; -case 130:this.$ = new RangeNode($$[$0-4+2-1], null, $$[$0-4+3-1]); +case 130:this.$ = new yy.RangeNode($$[$0-4+2-1], null, $$[$0-4+3-1]); break; -case 131:this.$ = new RangeNode(null, $$[$0-4+3-1], $$[$0-4+2-1]); +case 131:this.$ = new yy.RangeNode(null, $$[$0-4+3-1], $$[$0-4+2-1]); break; -case 132:this.$ = new ArrayNode([]); +case 132:this.$ = new yy.ArrayNode([]); break; -case 133:this.$ = new ArrayNode($$[$0-4+2-1]); +case 133:this.$ = new yy.ArrayNode($$[$0-4+2-1]); break; case 134:this.$ = [$$[$0-1+1-1]]; break; @@ -299,55 +299,55 @@ case 141:this.$ = $$[$0-1+1-1]; break; case 142:this.$ = $$[$0-3+1-1] instanceof Array ? $$[$0-3+1-1].concat([$$[$0-3+3-1]]) : [$$[$0-3+1-1]].concat([$$[$0-3+3-1]]); break; -case 143:this.$ = new TryNode($$[$0-3+2-1], $$[$0-3+3-1][0], $$[$0-3+3-1][1]); +case 143:this.$ = new yy.TryNode($$[$0-3+2-1], $$[$0-3+3-1][0], $$[$0-3+3-1][1]); break; -case 144:this.$ = new TryNode($$[$0-4+2-1], null, null, $$[$0-4+4-1]); +case 144:this.$ = new yy.TryNode($$[$0-4+2-1], null, null, $$[$0-4+4-1]); break; -case 145:this.$ = new TryNode($$[$0-5+2-1], $$[$0-5+3-1][0], $$[$0-5+3-1][1], $$[$0-5+5-1]); +case 145:this.$ = new yy.TryNode($$[$0-5+2-1], $$[$0-5+3-1][0], $$[$0-5+3-1][1], $$[$0-5+5-1]); break; case 146:this.$ = [$$[$0-3+2-1], $$[$0-3+3-1]]; break; -case 147:this.$ = new ThrowNode($$[$0-2+2-1]); +case 147:this.$ = new yy.ThrowNode($$[$0-2+2-1]); break; -case 148:this.$ = new ParentheticalNode($$[$0-3+2-1]); +case 148:this.$ = new yy.ParentheticalNode($$[$0-3+2-1]); break; -case 149:this.$ = new ParentheticalNode(new LiteralNode('')); +case 149:this.$ = new yy.ParentheticalNode(new yy.LiteralNode('')); break; -case 150:this.$ = new WhileNode($$[$0-2+2-1]); +case 150:this.$ = new yy.WhileNode($$[$0-2+2-1]); break; -case 151:this.$ = new WhileNode($$[$0-4+2-1], { +case 151:this.$ = new yy.WhileNode($$[$0-4+2-1], { guard: $$[$0-4+4-1] }); break; -case 152:this.$ = new WhileNode($$[$0-2+2-1], { +case 152:this.$ = new yy.WhileNode($$[$0-2+2-1], { invert: true }); break; -case 153:this.$ = new WhileNode($$[$0-4+2-1], { +case 153:this.$ = new yy.WhileNode($$[$0-4+2-1], { invert: true, guard: $$[$0-4+4-1] }); break; case 154:this.$ = $$[$0-2+1-1].addBody($$[$0-2+2-1]); break; -case 155:this.$ = $$[$0-2+2-1].addBody(Expressions.wrap([$$[$0-2+1-1]])); +case 155:this.$ = $$[$0-2+2-1].addBody(yy.Expressions.wrap([$$[$0-2+1-1]])); break; -case 156:this.$ = $$[$0-2+2-1].addBody(Expressions.wrap([$$[$0-2+1-1]])); +case 156:this.$ = $$[$0-2+2-1].addBody(yy.Expressions.wrap([$$[$0-2+1-1]])); break; case 157:this.$ = $$[$0-1+1-1]; break; -case 158:this.$ = new WhileNode(new LiteralNode('true')).addBody($$[$0-2+2-1]); +case 158:this.$ = new yy.WhileNode(new yy.LiteralNode('true')).addBody($$[$0-2+2-1]); break; -case 159:this.$ = new WhileNode(new LiteralNode('true')).addBody(Expressions.wrap([$$[$0-2+2-1]])); +case 159:this.$ = new yy.WhileNode(new yy.LiteralNode('true')).addBody(yy.Expressions.wrap([$$[$0-2+2-1]])); break; -case 160:this.$ = new ForNode($$[$0-2+1-1], $$[$0-2+2-1], $$[$0-2+2-1].vars[0], $$[$0-2+2-1].vars[1]); +case 160:this.$ = new yy.ForNode($$[$0-2+1-1], $$[$0-2+2-1], $$[$0-2+2-1].vars[0], $$[$0-2+2-1].vars[1]); break; -case 161:this.$ = new ForNode($$[$0-2+1-1], $$[$0-2+2-1], $$[$0-2+2-1].vars[0], $$[$0-2+2-1].vars[1]); +case 161:this.$ = new yy.ForNode($$[$0-2+1-1], $$[$0-2+2-1], $$[$0-2+2-1].vars[0], $$[$0-2+2-1].vars[1]); break; -case 162:this.$ = new ForNode($$[$0-2+2-1], $$[$0-2+1-1], $$[$0-2+1-1].vars[0], $$[$0-2+1-1].vars[1]); +case 162:this.$ = new yy.ForNode($$[$0-2+2-1], $$[$0-2+1-1], $$[$0-2+1-1].vars[0], $$[$0-2+1-1].vars[1]); break; case 163:this.$ = { - source: new ValueNode($$[$0-2+2-1]), + source: new yy.ValueNode($$[$0-2+2-1]), vars: [] }; break; @@ -366,9 +366,9 @@ case 166:this.$ = (function () { break; case 167:this.$ = $$[$0-1+1-1]; break; -case 168:this.$ = new ValueNode($$[$0-1+1-1]); +case 168:this.$ = new yy.ValueNode($$[$0-1+1-1]); break; -case 169:this.$ = new ValueNode($$[$0-1+1-1]); +case 169:this.$ = new yy.ValueNode($$[$0-1+1-1]); break; case 170:this.$ = [$$[$0-1+1-1]]; break; @@ -411,13 +411,13 @@ case 178:this.$ = { guard: $$[$0-6+6-1] }; break; -case 179:this.$ = new SwitchNode($$[$0-5+2-1], $$[$0-5+4-1]); +case 179:this.$ = new yy.SwitchNode($$[$0-5+2-1], $$[$0-5+4-1]); break; -case 180:this.$ = new SwitchNode($$[$0-7+2-1], $$[$0-7+4-1], $$[$0-7+6-1]); +case 180:this.$ = new yy.SwitchNode($$[$0-7+2-1], $$[$0-7+4-1], $$[$0-7+6-1]); break; -case 181:this.$ = new SwitchNode(null, $$[$0-4+3-1]); +case 181:this.$ = new yy.SwitchNode(null, $$[$0-4+3-1]); break; -case 182:this.$ = new SwitchNode(null, $$[$0-6+3-1], $$[$0-6+5-1]); +case 182:this.$ = new yy.SwitchNode(null, $$[$0-6+3-1], $$[$0-6+5-1]); break; case 183:this.$ = $$[$0-1+1-1]; break; @@ -427,83 +427,83 @@ case 185:this.$ = [[$$[$0-3+2-1], $$[$0-3+3-1]]]; break; case 186:this.$ = [[$$[$0-4+2-1], $$[$0-4+3-1]]]; break; -case 187:this.$ = new IfNode($$[$0-3+2-1], $$[$0-3+3-1]); +case 187:this.$ = new yy.IfNode($$[$0-3+2-1], $$[$0-3+3-1]); break; -case 188:this.$ = new IfNode($$[$0-3+2-1], $$[$0-3+3-1], { +case 188:this.$ = new yy.IfNode($$[$0-3+2-1], $$[$0-3+3-1], { invert: true }); break; -case 189:this.$ = $$[$0-5+1-1].addElse((new IfNode($$[$0-5+4-1], $$[$0-5+5-1])).forceStatement()); +case 189:this.$ = $$[$0-5+1-1].addElse((new yy.IfNode($$[$0-5+4-1], $$[$0-5+5-1])).forceStatement()); break; case 190:this.$ = $$[$0-3+1-1].addElse($$[$0-3+3-1]); break; case 191:this.$ = $$[$0-1+1-1]; break; -case 192:this.$ = new IfNode($$[$0-3+3-1], Expressions.wrap([$$[$0-3+1-1]]), { +case 192:this.$ = new yy.IfNode($$[$0-3+3-1], yy.Expressions.wrap([$$[$0-3+1-1]]), { statement: true }); break; -case 193:this.$ = new IfNode($$[$0-3+3-1], Expressions.wrap([$$[$0-3+1-1]]), { +case 193:this.$ = new yy.IfNode($$[$0-3+3-1], yy.Expressions.wrap([$$[$0-3+1-1]]), { statement: true }); break; -case 194:this.$ = new IfNode($$[$0-3+3-1], Expressions.wrap([$$[$0-3+1-1]]), { +case 194:this.$ = new yy.IfNode($$[$0-3+3-1], yy.Expressions.wrap([$$[$0-3+1-1]]), { statement: true, invert: true }); break; -case 195:this.$ = new IfNode($$[$0-3+3-1], Expressions.wrap([$$[$0-3+1-1]]), { +case 195:this.$ = new yy.IfNode($$[$0-3+3-1], yy.Expressions.wrap([$$[$0-3+1-1]]), { statement: true, invert: true }); break; -case 196:this.$ = new OpNode($$[$0-2+1-1], $$[$0-2+2-1]); +case 196:this.$ = new yy.OpNode($$[$0-2+1-1], $$[$0-2+2-1]); break; -case 197:this.$ = new OpNode('-', $$[$0-2+2-1]); +case 197:this.$ = new yy.OpNode('-', $$[$0-2+2-1]); break; -case 198:this.$ = new OpNode('+', $$[$0-2+2-1]); +case 198:this.$ = new yy.OpNode('+', $$[$0-2+2-1]); break; -case 199:this.$ = new OpNode('--', $$[$0-2+2-1]); +case 199:this.$ = new yy.OpNode('--', $$[$0-2+2-1]); break; -case 200:this.$ = new OpNode('++', $$[$0-2+2-1]); +case 200:this.$ = new yy.OpNode('++', $$[$0-2+2-1]); break; -case 201:this.$ = new OpNode('--', $$[$0-2+1-1], null, true); +case 201:this.$ = new yy.OpNode('--', $$[$0-2+1-1], null, true); break; -case 202:this.$ = new OpNode('++', $$[$0-2+1-1], null, true); +case 202:this.$ = new yy.OpNode('++', $$[$0-2+1-1], null, true); break; -case 203:this.$ = new OpNode('?', $$[$0-3+1-1], $$[$0-3+3-1]); +case 203:this.$ = new yy.OpNode('?', $$[$0-3+1-1], $$[$0-3+3-1]); break; -case 204:this.$ = new OpNode('+', $$[$0-3+1-1], $$[$0-3+3-1]); +case 204:this.$ = new yy.OpNode('+', $$[$0-3+1-1], $$[$0-3+3-1]); break; -case 205:this.$ = new OpNode('-', $$[$0-3+1-1], $$[$0-3+3-1]); +case 205:this.$ = new yy.OpNode('-', $$[$0-3+1-1], $$[$0-3+3-1]); break; -case 206:this.$ = new OpNode('==', $$[$0-3+1-1], $$[$0-3+3-1]); +case 206:this.$ = new yy.OpNode('==', $$[$0-3+1-1], $$[$0-3+3-1]); break; -case 207:this.$ = new OpNode('!=', $$[$0-3+1-1], $$[$0-3+3-1]); +case 207:this.$ = new yy.OpNode('!=', $$[$0-3+1-1], $$[$0-3+3-1]); break; -case 208:this.$ = new OpNode($$[$0-3+2-1], $$[$0-3+1-1], $$[$0-3+3-1]); +case 208:this.$ = new yy.OpNode($$[$0-3+2-1], $$[$0-3+1-1], $$[$0-3+3-1]); break; -case 209:this.$ = new OpNode($$[$0-3+2-1], $$[$0-3+1-1], $$[$0-3+3-1]); +case 209:this.$ = new yy.OpNode($$[$0-3+2-1], $$[$0-3+1-1], $$[$0-3+3-1]); break; -case 210:this.$ = new OpNode($$[$0-3+2-1], $$[$0-3+1-1], $$[$0-3+3-1]); +case 210:this.$ = new yy.OpNode($$[$0-3+2-1], $$[$0-3+1-1], $$[$0-3+3-1]); break; -case 211:this.$ = new OpNode($$[$0-3+2-1], $$[$0-3+1-1], $$[$0-3+3-1]); +case 211:this.$ = new yy.OpNode($$[$0-3+2-1], $$[$0-3+1-1], $$[$0-3+3-1]); break; -case 212:this.$ = new OpNode($$[$0-3+2-1], $$[$0-3+1-1], $$[$0-3+3-1]); +case 212:this.$ = new yy.OpNode($$[$0-3+2-1], $$[$0-3+1-1], $$[$0-3+3-1]); break; -case 213:this.$ = new OpNode($$[$0-5+2-1], $$[$0-5+1-1], $$[$0-5+4-1]); +case 213:this.$ = new yy.OpNode($$[$0-5+2-1], $$[$0-5+1-1], $$[$0-5+4-1]); break; -case 214:this.$ = new InNode($$[$0-3+1-1], $$[$0-3+3-1]); +case 214:this.$ = new yy.InNode($$[$0-3+1-1], $$[$0-3+3-1]); break; -case 215:this.$ = new OpNode('in', $$[$0-3+1-1], $$[$0-3+3-1]); +case 215:this.$ = new yy.OpNode('in', $$[$0-3+1-1], $$[$0-3+3-1]); break; -case 216:this.$ = new OpNode('instanceof', $$[$0-3+1-1], $$[$0-3+3-1]); +case 216:this.$ = new yy.OpNode('instanceof', $$[$0-3+1-1], $$[$0-3+3-1]); break; -case 217:this.$ = new OpNode($$[$0-4+2-1], new InNode($$[$0-4+1-1], $$[$0-4+4-1])); +case 217:this.$ = new yy.OpNode($$[$0-4+2-1], new yy.InNode($$[$0-4+1-1], $$[$0-4+4-1])); break; -case 218:this.$ = new OpNode($$[$0-4+2-1], new ParentheticalNode(new OpNode('in', $$[$0-4+1-1], $$[$0-4+4-1]))); +case 218:this.$ = new yy.OpNode($$[$0-4+2-1], new yy.ParentheticalNode(new yy.OpNode('in', $$[$0-4+1-1], $$[$0-4+4-1]))); break; -case 219:this.$ = new OpNode($$[$0-4+2-1], new ParentheticalNode(new OpNode('instanceof', $$[$0-4+1-1], $$[$0-4+4-1]))); +case 219:this.$ = new yy.OpNode($$[$0-4+2-1], new yy.ParentheticalNode(new yy.OpNode('instanceof', $$[$0-4+1-1], $$[$0-4+4-1]))); break; } }, @@ -701,7 +701,7 @@ exports.main = function commonjsMain(args) { } return exports.parser.parse(source); } -if (typeof module !== "undefined" && require.main === module) { +if (typeof module !== 'undefined' && require.main === module) { exports.main(typeof process !== 'undefined' ? process.argv.slice(1) : require("system").args); } } \ No newline at end of file diff --git a/src/coffee-script.coffee b/src/coffee-script.coffee index a843d4eb..d0c88cb7 100755 --- a/src/coffee-script.coffee +++ b/src/coffee-script.coffee @@ -12,7 +12,6 @@ if process? Lexer = require('./lexer').Lexer parser = require('./parser').parser helpers = require('./helpers').helpers - helpers.extend global, require './nodes' # TODO: Remove registerExtension when fully deprecated if require.extensions fs = require 'fs' @@ -82,3 +81,5 @@ parser.lexer = @tokens = tokens @pos = 0 upcomingInput: -> "" + +parser.yy = require './nodes' diff --git a/src/grammar.coffee b/src/grammar.coffee index 21682a5e..512b1b64 100644 --- a/src/grammar.coffee +++ b/src/grammar.coffee @@ -33,6 +33,7 @@ unwrap = /function\s*\(\)\s*\{\s*return\s*([\s\S]*);\s*\}/ o = (patternString, action, options) -> return [patternString, '$$ = $1;', options] unless action action = if match = (action + '').match(unwrap) then match[1] else "(#{action}())" + action = action.replace /\b(?:[A-Z][a-z]+Node|Expressions)\b/g, 'yy.$&' [patternString, "$$ = #{action};", options] # Grammatical Rules