From 49824ce1a6a83396ac25b79d6eb83e959e716f9b Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Wed, 21 Apr 2010 23:21:48 -0400 Subject: [PATCH] removing yytext mentions for real this time. --- lib/grammar.js | 23 ++++++++++------------- lib/parser.js | 20 ++++++++++---------- src/grammar.coffee | 24 ++++++++++++------------ 3 files changed, 32 insertions(+), 35 deletions(-) diff --git a/lib/grammar.js b/lib/grammar.js index 409575f4..f7789d5b 100644 --- a/lib/grammar.js +++ b/lib/grammar.js @@ -66,9 +66,9 @@ Line: [o("Expression"), o("Statement")], // Pure statements which cannot be expressions. Statement: [o("Return"), o("Throw"), o("BREAK", function() { - return new LiteralNode(yytext); + return new LiteralNode($1); }), o("CONTINUE", function() { - return new LiteralNode(yytext); + return new LiteralNode($1); }) ], // All the different types of expressions in our language. The basic unit of @@ -89,23 +89,23 @@ ], // A literal identifier, a variable name or property. Identifier: [o("IDENTIFIER", function() { - return new LiteralNode(yytext); + return new LiteralNode($1); }) ], // Alphanumerics are separated from the other **Literal** matchers because // they can also serve as keys in object literals. AlphaNumeric: [o("NUMBER", function() { - return new LiteralNode(yytext); + return new LiteralNode($1); }), o("STRING", function() { - return new LiteralNode(yytext); + return new LiteralNode($1); }) ], // All of our immediate values. These can (in general), be passed straight // through and printed to JavaScript. Literal: [o("AlphaNumeric"), o("JS", function() { - return new LiteralNode(yytext); + return new LiteralNode($1); }), o("REGEX", function() { - return new LiteralNode(yytext); + return new LiteralNode($1); }), o("TRUE", function() { return new LiteralNode(true); }), o("FALSE", function() { @@ -144,7 +144,7 @@ // have to parse comments like any other construct, and identify all of the // positions in which they can occur in the grammar. Comment: [o("COMMENT", function() { - return new CommentNode(yytext); + return new CommentNode($1); }) ], // [The existential operator](http://jashkenas.github.com/coffee-script/#existence). @@ -181,7 +181,7 @@ // A single parameter in a function definition can be ordinary, or a splat // that hoovers up the remaining arguments. Param: [o("PARAM", function() { - return new LiteralNode(yytext); + return new LiteralNode($1); }), o("Param . . .", function() { return new SplatNode($1); }) @@ -430,10 +430,7 @@ ], // A language extension to CoffeeScript from the outside. We simply pass // it through unaltered. - Extension: [o("EXTENSION", function() { - return yytext; - }) - ], + Extension: [o("EXTENSION")], // The condition portion of a while loop. WhileSource: [o("WHILE Expression", function() { return new WhileNode($2); diff --git a/lib/parser.js b/lib/parser.js index deec2a4e..4b25fade 100755 --- a/lib/parser.js +++ b/lib/parser.js @@ -31,9 +31,9 @@ case 10:this.$ = $$[$0-1+1-1]; break; case 11:this.$ = $$[$0-1+1-1]; break; -case 12:this.$ = new LiteralNode(yytext); +case 12:this.$ = new LiteralNode($$[$0-1+1-1]); break; -case 13:this.$ = new LiteralNode(yytext); +case 13:this.$ = new LiteralNode($$[$0-1+1-1]); break; case 14:this.$ = $$[$0-1+1-1]; break; @@ -75,17 +75,17 @@ case 32:this.$ = new Expressions(); break; case 33:this.$ = Expressions.wrap([$$[$0-2+2-1]]); break; -case 34:this.$ = new LiteralNode(yytext); +case 34:this.$ = new LiteralNode($$[$0-1+1-1]); break; -case 35:this.$ = new LiteralNode(yytext); +case 35:this.$ = new LiteralNode($$[$0-1+1-1]); break; -case 36:this.$ = new LiteralNode(yytext); +case 36:this.$ = new LiteralNode($$[$0-1+1-1]); break; case 37:this.$ = $$[$0-1+1-1]; break; -case 38:this.$ = new LiteralNode(yytext); +case 38:this.$ = new LiteralNode($$[$0-1+1-1]); break; -case 39:this.$ = new LiteralNode(yytext); +case 39:this.$ = new LiteralNode($$[$0-1+1-1]); break; case 40:this.$ = new LiteralNode(true); break; @@ -111,7 +111,7 @@ case 50:this.$ = new ReturnNode($$[$0-2+2-1]); break; case 51:this.$ = new ReturnNode(new ValueNode(new LiteralNode('null'))); break; -case 52:this.$ = new CommentNode(yytext); +case 52:this.$ = new CommentNode($$[$0-1+1-1]); break; case 53:this.$ = new ExistenceNode($$[$0-2+1-1]); break; @@ -129,7 +129,7 @@ case 59:this.$ = [$$[$0-1+1-1]]; break; case 60:this.$ = $$[$0-3+1-1].concat([$$[$0-3+3-1]]); break; -case 61:this.$ = new LiteralNode(yytext); +case 61:this.$ = new LiteralNode($$[$0-1+1-1]); break; case 62:this.$ = new SplatNode($$[$0-4+1-1]); break; @@ -297,7 +297,7 @@ case 140:this.$ = new ThrowNode($$[$0-2+2-1]); break; case 141:this.$ = new ParentheticalNode($$[$0-3+2-1]); break; -case 142:this.$ = yytext; +case 142:this.$ = $$[$0-1+1-1]; break; case 143:this.$ = new WhileNode($$[$0-2+2-1]); break; diff --git a/src/grammar.coffee b/src/grammar.coffee index 87d1a947..dc82bc6b 100644 --- a/src/grammar.coffee +++ b/src/grammar.coffee @@ -65,19 +65,19 @@ grammar: { o "Body TERMINATOR Line", -> $1.push $3 o "Body TERMINATOR" ] - + # Expressions and statements, which make up a line in a body. Line: [ o "Expression" o "Statement" ] - + # Pure statements which cannot be expressions. Statement: [ o "Return" o "Throw" - o "BREAK", -> new LiteralNode yytext - o "CONTINUE", -> new LiteralNode yytext + o "BREAK", -> new LiteralNode $1 + o "CONTINUE", -> new LiteralNode $1 ] # All the different types of expressions in our language. The basic unit of @@ -115,22 +115,22 @@ grammar: { # A literal identifier, a variable name or property. Identifier: [ - o "IDENTIFIER", -> new LiteralNode yytext + o "IDENTIFIER", -> new LiteralNode $1 ] # Alphanumerics are separated from the other **Literal** matchers because # they can also serve as keys in object literals. AlphaNumeric: [ - o "NUMBER", -> new LiteralNode yytext - o "STRING", -> new LiteralNode yytext + o "NUMBER", -> new LiteralNode $1 + o "STRING", -> new LiteralNode $1 ] # All of our immediate values. These can (in general), be passed straight # through and printed to JavaScript. Literal: [ o "AlphaNumeric" - o "JS", -> new LiteralNode yytext - o "REGEX", -> new LiteralNode yytext + o "JS", -> new LiteralNode $1 + o "REGEX", -> new LiteralNode $1 o "TRUE", -> new LiteralNode true o "FALSE", -> new LiteralNode false o "YES", -> new LiteralNode true @@ -162,7 +162,7 @@ grammar: { # have to parse comments like any other construct, and identify all of the # positions in which they can occur in the grammar. Comment: [ - o "COMMENT", -> new CommentNode yytext + o "COMMENT", -> new CommentNode $1 ] # [The existential operator](http://jashkenas.github.com/coffee-script/#existence). @@ -195,7 +195,7 @@ grammar: { # A single parameter in a function definition can be ordinary, or a splat # that hoovers up the remaining arguments. Param: [ - o "PARAM", -> new LiteralNode yytext + o "PARAM", -> new LiteralNode $1 o "Param . . .", -> new SplatNode $1 ] @@ -411,7 +411,7 @@ grammar: { # A language extension to CoffeeScript from the outside. We simply pass # it through unaltered. Extension: [ - o "EXTENSION", -> yytext + o "EXTENSION" ] # The condition portion of a while loop.