From 79dfe2806a873b9bef9f405bb8f222eab4b86f50 Mon Sep 17 00:00:00 2001
From: Chris Double <chris@bethia.(none)>
Date: Tue, 17 Jun 2008 22:07:57 +1200
Subject: [PATCH] Remove javascript boa constructors

---
 extra/peg/javascript/javascript.factor | 190 ++++++++++---------------
 1 file changed, 77 insertions(+), 113 deletions(-)

diff --git a/extra/peg/javascript/javascript.factor b/extra/peg/javascript/javascript.factor
index 33fd6dd069..5c76c45f4c 100644
--- a/extra/peg/javascript/javascript.factor
+++ b/extra/peg/javascript/javascript.factor
@@ -45,42 +45,6 @@ TUPLE: ast-try t e c f ;
 TUPLE: ast-return e ;
 TUPLE: ast-case c cs ;
 TUPLE: ast-default cs ;
-C: <ast-name> ast-name
-C: <ast-keyword> ast-keyword
-C: <ast-number> ast-number
-C: <ast-string> ast-string
-C: <ast-cond-expr> ast-cond-expr
-C: <ast-set> ast-set
-C: <ast-get> ast-get
-C: <ast-mset> ast-mset
-C: <ast-binop> ast-binop
-C: <ast-unop> ast-unop
-C: <ast-preop> ast-preop
-C: <ast-postop> ast-postop
-C: <ast-getp> ast-getp
-C: <ast-send> ast-send
-C: <ast-call> ast-call
-C: <ast-this> ast-this
-C: <ast-new> ast-new
-C: <ast-array> ast-array
-C: <ast-json> ast-json
-C: <ast-binding> ast-binding
-C: <ast-func> ast-func
-C: <ast-var> ast-var
-C: <ast-begin> ast-begin
-C: <ast-if> ast-if
-C: <ast-while> ast-while
-C: <ast-do-while> ast-do-while
-C: <ast-for> ast-for
-C: <ast-for-in> ast-for-in
-C: <ast-switch> ast-switch
-C: <ast-break> ast-break
-C: <ast-continue> ast-continue
-C: <ast-throw> ast-throw
-C: <ast-try> ast-try
-C: <ast-return> ast-return
-C: <ast-case> ast-case
-C: <ast-default> ast-default
 
 EBNF: javascript
 Letter            = [a-zA-Z]
@@ -117,10 +81,10 @@ Keyword           =  ("break"
                     | "var"
                     | "void"
                     | "while"
-                    | "with") => [[ <ast-keyword> ]]
-Name              = !(Keyword) (iName):n => [[ drop n <ast-name> ]]
-Number            =   Digits:ws '.' Digits:fs => [[ drop ws "." fs 3array concat >string string>number <ast-number> ]]
-                    | Digits => [[ >string string>number <ast-number> ]]  
+                    | "with") => [[ ast-keyword boa ]]
+Name              = !(Keyword) (iName):n => [[ drop n ast-name boa ]]
+Number            =   Digits:ws '.' Digits:fs => [[ drop ws "." fs 3array concat >string string>number ast-number boa ]]
+                    | Digits => [[ >string string>number ast-number boa ]]  
 
 EscapeChar        =   "\\n" => [[ drop 10 ]] 
                     | "\\r" => [[ drop 13 ]]
@@ -128,9 +92,9 @@ EscapeChar        =   "\\n" => [[ drop 10 ]]
 StringChars1       = (EscapeChar | !('"""') .)* => [[ >string ]]
 StringChars2       = (EscapeChar | !('"') .)* => [[ >string ]]
 StringChars3       = (EscapeChar | !("'") .)* => [[ >string ]]
-Str                =   '"""' StringChars1:cs '"""' => [[ drop cs <ast-string> ]]
-                     | '"' StringChars2:cs '"' => [[ drop cs <ast-string> ]]
-                     | "'" StringChars3:cs "'" => [[ drop cs <ast-string> ]]
+Str                =   '"""' StringChars1:cs '"""' => [[ drop cs ast-string boa ]]
+                     | '"' StringChars2:cs '"' => [[ drop cs ast-string boa ]]
+                     | "'" StringChars3:cs "'" => [[ drop cs ast-string boa ]]
 Special            =   "("   | ")"   | "{"   | "}"   | "["   | "]"   | ","   | ";"
                      | "?"   | ":"   | "!==" | "~="  | "===" | "=="  | "="   | ">="
                      | ">"   | "<="  | "<"   | "++"  | "+="  | "+"   | "--"  | "-="
@@ -140,108 +104,108 @@ Tok                = Spaces (Name | Keyword | Number | Str | Special )
 Toks               = (Tok)* Spaces 
 SpacesNoNl         = (!("\n") Space)* => [[ drop ignore ]]
 
-Expr               =   OrExpr:e "?" Expr:t ":" Expr:f   => [[ drop e t f <ast-cond-expr> ]]
-                     | OrExpr:e "=" Expr:rhs            => [[ drop e rhs <ast-set> ]]
-                     | OrExpr:e "+=" Expr:rhs           => [[ drop e rhs "+" <ast-mset> ]]
-                     | OrExpr:e "-=" Expr:rhs           => [[ drop e rhs "-" <ast-mset> ]]
-                     | OrExpr:e "*=" Expr:rhs           => [[ drop e rhs "*" <ast-mset> ]]
-                     | OrExpr:e "/=" Expr:rhs           => [[ drop e rhs "/" <ast-mset> ]]
-                     | OrExpr:e "%=" Expr:rhs           => [[ drop e rhs "%" <ast-mset> ]]
-                     | OrExpr:e "&&=" Expr:rhs          => [[ drop e rhs "&&" <ast-mset> ]]
-                     | OrExpr:e "||=" Expr:rhs          => [[ drop e rhs "||" <ast-mset> ]]
+Expr               =   OrExpr:e "?" Expr:t ":" Expr:f   => [[ drop e t f ast-cond-expr boa ]]
+                     | OrExpr:e "=" Expr:rhs            => [[ drop e rhs ast-set boa ]]
+                     | OrExpr:e "+=" Expr:rhs           => [[ drop e rhs "+" ast-mset boa ]]
+                     | OrExpr:e "-=" Expr:rhs           => [[ drop e rhs "-" ast-mset boa ]]
+                     | OrExpr:e "*=" Expr:rhs           => [[ drop e rhs "*" ast-mset boa ]]
+                     | OrExpr:e "/=" Expr:rhs           => [[ drop e rhs "/" ast-mset boa ]]
+                     | OrExpr:e "%=" Expr:rhs           => [[ drop e rhs "%" ast-mset boa ]]
+                     | OrExpr:e "&&=" Expr:rhs          => [[ drop e rhs "&&" ast-mset boa ]]
+                     | OrExpr:e "||=" Expr:rhs          => [[ drop e rhs "||" ast-mset boa ]]
                      | OrExpr:e                         => [[ drop e ]]
 
-OrExpr             =   OrExpr:x "||" AndExpr:y          => [[ drop x y "||" <ast-binop> ]]
+OrExpr             =   OrExpr:x "||" AndExpr:y          => [[ drop x y "||" ast-binop boa ]]
                      | AndExpr
-AndExpr            =   AndExpr:x "&&" EqExpr:y          => [[ drop x y "&&" <ast-binop> ]]
+AndExpr            =   AndExpr:x "&&" EqExpr:y          => [[ drop x y "&&" ast-binop boa ]]
                      | EqExpr
-EqExpr             =   EqExpr:x "==" RelExpr:y          => [[ drop x y "==" <ast-binop> ]]
-                     | EqExpr:x "!=" RelExpr:y          => [[ drop x y "!=" <ast-binop> ]]
-                     | EqExpr:x "===" RelExpr:y         => [[ drop x y "===" <ast-binop> ]]
-                     | EqExpr:x "!==" RelExpr:y         => [[ drop x y "!==" <ast-binop> ]]
+EqExpr             =   EqExpr:x "==" RelExpr:y          => [[ drop x y "==" ast-binop boa ]]
+                     | EqExpr:x "!=" RelExpr:y          => [[ drop x y "!=" ast-binop boa ]]
+                     | EqExpr:x "===" RelExpr:y         => [[ drop x y "===" ast-binop boa ]]
+                     | EqExpr:x "!==" RelExpr:y         => [[ drop x y "!==" ast-binop boa ]]
                      | RelExpr
-RelExpr            =   RelExpr:x ">" AddExpr:y          => [[ drop x y ">" <ast-binop> ]]
-                     | RelExpr:x ">=" AddExpr:y         => [[ drop x y ">=" <ast-binop> ]]
-                     | RelExpr:x "<" AddExpr:y          => [[ drop x y "<" <ast-binop> ]]
-                     | RelExpr:x "<=" AddExpr:y         => [[ drop x y "<=" <ast-binop> ]]
-                     | RelExpr:x "instanceof" AddExpr:y => [[ drop x y "instanceof" <ast-binop> ]]
+RelExpr            =   RelExpr:x ">" AddExpr:y          => [[ drop x y ">" ast-binop boa ]]
+                     | RelExpr:x ">=" AddExpr:y         => [[ drop x y ">=" ast-binop boa ]]
+                     | RelExpr:x "<" AddExpr:y          => [[ drop x y "<" ast-binop boa ]]
+                     | RelExpr:x "<=" AddExpr:y         => [[ drop x y "<=" ast-binop boa ]]
+                     | RelExpr:x "instanceof" AddExpr:y => [[ drop x y "instanceof" ast-binop boa ]]
                      | AddExpr
-AddExpr            =   AddExpr:x "+" MulExpr:y          => [[ drop x y "+" <ast-binop> ]]
-                     | AddExpr:x "-" MulExpr:y          => [[ drop x y "-" <ast-binop> ]]
+AddExpr            =   AddExpr:x "+" MulExpr:y          => [[ drop x y "+" ast-binop boa ]]
+                     | AddExpr:x "-" MulExpr:y          => [[ drop x y "-" ast-binop boa ]]
                      | MulExpr
-MulExpr            =   MulExpr:x "*" MulExpr:y          => [[ drop x y "*" <ast-binop> ]]
-                     | MulExpr:x "/" MulExpr:y          => [[ drop x y "/" <ast-binop> ]]
-                     | MulExpr:x "%" MulExpr:y          => [[ drop x y "%" <ast-binop> ]]
+MulExpr            =   MulExpr:x "*" MulExpr:y          => [[ drop x y "*" ast-binop boa ]]
+                     | MulExpr:x "/" MulExpr:y          => [[ drop x y "/" ast-binop boa ]]
+                     | MulExpr:x "%" MulExpr:y          => [[ drop x y "%" ast-binop boa ]]
                      | Unary
-Unary              =   "-" Postfix:p                    => [[ drop p "-" <ast-unop> ]]
+Unary              =   "-" Postfix:p                    => [[ drop p "-" ast-unop boa ]]
                      | "+" Postfix:p                    => [[ drop p ]]
-                     | "++" Postfix:p                   => [[ drop p "++" <ast-preop> ]]
-                     | "--" Postfix:p                   => [[ drop p "--" <ast-preop> ]]
-                     | "!" Postfix:p                    => [[ drop p "!" <ast-unop> ]]
+                     | "++" Postfix:p                   => [[ drop p "++" ast-preop boa ]]
+                     | "--" Postfix:p                   => [[ drop p "--" ast-preop boa ]]
+                     | "!" Postfix:p                    => [[ drop p "!" ast-unop boa ]]
                      | Postfix
-Postfix            =   PrimExpr:p SpacesNoNl "++"       => [[ drop p "++" <ast-postop> ]]
-                     | PrimExpr:p SpacesNoNl "--"       => [[ drop p "--" <ast-postop> ]]
+Postfix            =   PrimExpr:p SpacesNoNl "++"       => [[ drop p "++" ast-postop boa ]]
+                     | PrimExpr:p SpacesNoNl "--"       => [[ drop p "--" ast-postop boa ]]
                      | PrimExpr
 Args               =   Expr ("," Expr)*                      => [[ first2 swap prefix ]]
-PrimExpr           =   PrimExpr:p "[" Expr:i "]"             => [[ drop i p <ast-getp> ]]
-                     | PrimExpr:p "." Name:m "(" Args:as ")" => [[ drop m p as <ast-send> ]]
-                     | PrimExpr:p "." Name:f                 => [[ drop f p <ast-getp> ]]
-                     | PrimExpr:p "(" Args:as ")"            => [[ drop p as <ast-call> ]]
+PrimExpr           =   PrimExpr:p "[" Expr:i "]"             => [[ drop i p ast-getp boa ]]
+                     | PrimExpr:p "." Name:m "(" Args:as ")" => [[ drop m p as ast-send boa ]]
+                     | PrimExpr:p "." Name:f                 => [[ drop f p ast-getp boa ]]
+                     | PrimExpr:p "(" Args:as ")"            => [[ drop p as ast-call boa ]]
                      | PrimExprHd
 PrimExprHd         =   "(" Expr:e ")"                        => [[ drop e ]]
-                     | "this"                                => [[ drop <ast-this> ]]
-                     | Name                                  => [[ <ast-get> ]]
-                     | Number                                => [[ <ast-number> ]]
-                     | Str                                   => [[ <ast-string> ]]
+                     | "this"                                => [[ drop ast-this boa ]]
+                     | Name                                  => [[ ast-get boa ]]
+                     | Number                                => [[ ast-number boa ]]
+                     | Str                                   => [[ ast-string boa ]]
                      | "function" FuncRest:fr                => [[ drop fr ]]
-                     | "new" Name:n "(" Args:as ")"          => [[ drop n as <ast-new> ]]
-                     | "[" Args:es "]"                       => [[ drop es <ast-array> ]]
+                     | "new" Name:n "(" Args:as ")"          => [[ drop n as ast-new boa ]]
+                     | "[" Args:es "]"                       => [[ drop es ast-array boa ]]
                      | Json
 JsonBindings        = JsonBinding ("," JsonBinding)*          => [[ first2 swap prefix ]]
-Json               = "{" JsonBindings:bs "}"                  => [[ drop bs <ast-json> ]]
-JsonBinding        = JsonPropName:n ":" Expr:v               => [[ drop n v <ast-binding> ]]
+Json               = "{" JsonBindings:bs "}"                  => [[ drop bs ast-json boa ]]
+JsonBinding        = JsonPropName:n ":" Expr:v               => [[ drop n v ast-binding boa ]]
 JsonPropName       = Name | Number | Str
 Formal             = Spaces Name
 Formals            = Formal ("," Formal)*                    => [[ first2 swap prefix ]]
-FuncRest           = "(" Formals:fs ")" "{" SrcElems:body "}" => [[ drop fs body <ast-func> ]]
+FuncRest           = "(" Formals:fs ")" "{" SrcElems:body "}" => [[ drop fs body ast-func boa ]]
 Sc                 = SpacesNoNl ("\n" | "}")| ";"
-Binding            =   Name:n "=" Expr:v                      => [[ drop n v <ast-var> ]]
-                     | Name:n                                 => [[ drop n "undefined" <ast-get> <ast-var> ]]
+Binding            =   Name:n "=" Expr:v                      => [[ drop n v ast-var boa ]]
+                     | Name:n                                 => [[ drop n "undefined" ast-get boa ast-var boa ]]
 Block              = "{" SrcElems:ss "}"                      => [[ drop ss ]]
 Bindings           = Binding ("," Binding)*                   => [[ first2 swap prefix ]]
 For1               =   "var" Binding => [[ second ]] 
                      | Expr 
-                     | Spaces => [[ "undefined" <ast-get> ]] 
+                     | Spaces => [[ "undefined" ast-get boa ]] 
 For2               =   Expr
-                     | Spaces => [[ "true" <ast-get> ]] 
+                     | Spaces => [[ "true" ast-get boa ]] 
 For3               =   Expr
-                     | Spaces => [[ "undefined" <ast-get> ]] 
-ForIn1             =   "var" Name:n => [[ drop n "undefined" <ast-get> <ast-var> ]]
+                     | Spaces => [[ "undefined" ast-get boa ]] 
+ForIn1             =   "var" Name:n => [[ drop n "undefined" ast-get boa ast-var boa ]]
                      | Expr
-Switch1            =   "case" Expr:c ":" SrcElems:cs => [[ drop c cs <ast-case> ]]
-                     | "default" ":" SrcElems:cs => [[ drop cs <ast-default> ]]  
+Switch1            =   "case" Expr:c ":" SrcElems:cs => [[ drop c cs ast-case boa ]]
+                     | "default" ":" SrcElems:cs => [[ drop cs ast-default boa ]]  
 SwitchBody         = (Switch1)*
 Finally            =   "finally" Block:b => [[ drop b ]]
-                     | Spaces => [[ drop "undefined" <ast-get> ]]
+                     | Spaces => [[ drop "undefined" ast-get boa ]]
 Stmt               =   Block                     
-                     | "var" Bindings:bs Sc                   => [[ drop bs <ast-begin> ]]
-                     | "if" "(" Expr:c ")" Stmt:t "else" Stmt:f => [[ drop c t f <ast-if> ]]
-                     | "if" "(" Expr:c ")" Stmt:t               => [[ drop c t "undefined" <ast-get> <ast-if> ]]
-                     | "while" "(" Expr:c ")" Stmt:s            => [[ drop c s <ast-while> ]]
-                     | "do" Stmt:s "while" "(" Expr:c ")" Sc    => [[ drop s c <ast-do-while> ]]
-                     | "for" "(" For1:i ";" For2:c ";" For3:u ")" Stmt:s => [[ drop i c u s <ast-for> ]]
-                     | "for" "(" ForIn1:v "in" Expr:e ")" Stmt:s => [[ drop v e s <ast-for-in> ]]
-                     | "switch" "(" Expr:e ")" "{" SwitchBody:cs "}" => [[ drop e cs <ast-switch> ]]
-                     | "break" Sc                                    => [[ drop <ast-break> ]]
-                     | "continue" Sc                                 => [[ drop <ast-continue> ]]
-                     | "throw" SpacesNoNl Expr:e Sc                  => [[ drop e <ast-throw> ]]
-                     | "try" Block:t "catch" "(" Name:e ")" Block:c Finally:f => [[ drop t e c f <ast-try> ]]
-                     | "return" Expr:e Sc                            => [[ drop e <ast-return> ]]
-                     | "return" Sc                                   => [[ drop "undefined" <ast-get> <ast-return> ]]
+                     | "var" Bindings:bs Sc                   => [[ drop bs ast-begin boa ]]
+                     | "if" "(" Expr:c ")" Stmt:t "else" Stmt:f => [[ drop c t f ast-if boa ]]
+                     | "if" "(" Expr:c ")" Stmt:t               => [[ drop c t "undefined" ast-get boa ast-if boa ]]
+                     | "while" "(" Expr:c ")" Stmt:s            => [[ drop c s ast-while boa ]]
+                     | "do" Stmt:s "while" "(" Expr:c ")" Sc    => [[ drop s c ast-do-while boa ]]
+                     | "for" "(" For1:i ";" For2:c ";" For3:u ")" Stmt:s => [[ drop i c u s ast-for boa ]]
+                     | "for" "(" ForIn1:v "in" Expr:e ")" Stmt:s => [[ drop v e s ast-for-in boa ]]
+                     | "switch" "(" Expr:e ")" "{" SwitchBody:cs "}" => [[ drop e cs ast-switch boa ]]
+                     | "break" Sc                                    => [[ drop ast-break boa ]]
+                     | "continue" Sc                                 => [[ drop ast-continue boa ]]
+                     | "throw" SpacesNoNl Expr:e Sc                  => [[ drop e ast-throw boa ]]
+                     | "try" Block:t "catch" "(" Name:e ")" Block:c Finally:f => [[ drop t e c f ast-try boa ]]
+                     | "return" Expr:e Sc                            => [[ drop e ast-return boa ]]
+                     | "return" Sc                                   => [[ drop "undefined" ast-get boa ast-return boa ]]
                      | Expr:e Sc                                     => [[ drop e ]]
-                     | ";"                                           => [[ drop "undefined" <ast-get> ]]
-SrcElem            =   "function" Name:n FuncRest:f                  => [[ drop n f <ast-var> ]]
+                     | ";"                                           => [[ drop "undefined" ast-get boa ]]
+SrcElem            =   "function" Name:n FuncRest:f                  => [[ drop n f ast-var boa ]]
                      | Stmt
-SrcElems           = (SrcElem)*                                      => [[ <ast-begin> ]]
+SrcElems           = (SrcElem)*                                      => [[ ast-begin boa ]]
 TopLevel           = SrcElems Spaces                               
 ;EBNF
\ No newline at end of file