diff modules/parser.tp @ 247:b76f683d076e

Finish moving ast object definitions to a separate ast module
author Michael Pavone <pavone@retrodev.com>
date Wed, 08 Jan 2014 19:27:19 -0800
parents 8c81afd6d2d3
children 004946743678
line wrap: on
line diff
--- a/modules/parser.tp	Mon Jan 06 19:41:35 2014 -0800
+++ b/modules/parser.tp	Wed Jan 08 19:27:19 2014 -0800
@@ -698,12 +698,7 @@
 	symexpr <- match: Name where: {
 		Name <- match: (onePlus: (charClass: "a-zA-Z_@!?")) . (zeroPlus: ((matchOne: [":" ""]) . (charClass: "a-zA-Z_@!?0-9")))
 	} yield: {
-		#{
-			name <- Name
-			string <- {
-				name
-			}
-		}
+		ast symbol: Name
 	}
 
 	namepart <- match: hws . Symbol . ":" where: {
@@ -734,7 +729,7 @@
 		if: (Parts length) = 0 {
 			Parts <- []
 		}
-		Initial | Parts foldr: #{
+		combined <- Initial | Parts foldr: #{
 			name <- ""
 			args <- []
 		} with: :acc el {
@@ -745,83 +740,31 @@
 			} else: {
 				nextArgs <- (el val) | nextArgs
 			}
-
 			#{
 				name <- nextName
 				args <- nextArgs
-				string <- {
-					str <- ""
-					curArgs <- args
-					nameParts <- name splitOn: ":"
-					foreach: nameParts :idx part {
-						str <- str . part . ":"
-						if: (not: (curArgs empty?)) {
-							str <- str . " " . (curArgs value)
-							curArgs <- curArgs tail
-						}
-					}
-					while: { not: (curArgs empty?) } do: {
-						str <- str . " " . (curArgs value)
-						curArgs <- curArgs tail
-					}
-					str
-				}
 			}
 		}
+		ast funcall: (ast symbol: (combined name)) withArgs: (combined args) hasReceiver?: false
 	}
 
 	unarymeth <- match: Receiver . hws . Method where: {
 		Receiver <- match: opexpr
 		Method <- match: symexpr
 	} yield: {
-		#{
-			receiver <- Receiver
-			name <- Method name
-			args <- []
-			string <- {
-				(string: receiver) . " " . name
-			}
-		}
+		ast funcall: Method withArgs: [Receiver] hasReceiver?: true
 	}
 
 	methcall <- match: Receiver . hws . Rest where: {
 		Receiver <- match: opexpr
 		Rest <- match: funcall
 	} yield: {
-		#{
-			receiver <- Receiver
-			name <- Rest name
-			args <- Rest args
-			string <- {
-				nameParts <- name splitOn: ":"
-				curArgs <- args
-				str <- (string: receiver) . " "
-				foreach: nameParts :part {
-					str <- str . part . ":"
-					if: (not: (curArgs empty?)) {
-						str <- str . " " . (curArgs value)
-						curArgs <- curArgs tail
-					}
-				}
-				while: { not: (curArgs empty?) } do: {
-					str <- str . " " . (curArgs value)
-					curArgs <- curArgs tail
-				}
-				str
-			}
-		}
+		ast funcall: (Rest tocall) withArgs: Receiver | (Rest args) hasReceiver?: true
 	}
 	_processOpPieces <- :Left Pieces {
 		if: (Pieces length) > 0 {
 			Pieces fold: Left with: :acc piece {
-				#{
-					left <- acc
-					op <- piece op
-					right <- piece right
-					string <- {
-						(string: left) . " " . op . " " . right
-					}
-				}
+				ast binaryOp: (piece op) withArgs: acc (piece right)
 			}
 		} else: {
 			Left
@@ -868,13 +811,7 @@
 		]
 		Expr <- match: expr
 	} yield: {
-		#{
-			assign <- Expr
-			to <- Symbol
-			string <- {
-				(string: to) . " <- " . assign
-			}
-		}
+		ast assign: Expr to: Symbol
 	}
 
 	object <- match: "#{" . ws . Messages . "}" where: {
@@ -888,14 +825,7 @@
 		if: (Messages length) = 0 {
 			Messages <- []
 		}
-		#{
-			messages <- Messages
-			string <- {
-				"#{\n\t". ((messages map: :el {
-					string: el
-				}) join: "\n\t") . "\n}"
-			}
-		}
+		ast object: Messages
 	}
 
 	listlit <- match: "[" . ws . Els . "]" where: {
@@ -905,14 +835,7 @@
 		if: (Els length) = 0 {
 			Els <- []
 		}
-		#{
-			litval <- Els
-			string <- {
-				"[\n\t". ((litval map: :el {
-					string: el
-				}) join: "\n\t") . "\n]"
-			}
-		}
+		ast seqLit: Els array?: false
 	}
 
 	arraylit <- match: "#[" . ws . Els . "]" where: {
@@ -922,14 +845,7 @@
 		if: (Els length) = 0 {
 			Els <- []
 		}
-		#{
-			litval <- Els
-			string <- {
-				"#[\n\t". ((litval map: :el {
-					string: el
-				}) join: "\n\t") . "\n]"
-			}
-		}
+		ast seqLit: Els array?: true
 	}
 
 	argname <- match: hws . Pre . Initial . Rest where: {
@@ -958,15 +874,7 @@
 		if: (Exprs length) = 0 {
 			Exprs <- []
 		}
-		#{
-			args <- Arglist
-			expressions <- Exprs
-			string <- {
-				(args join: " ") . "{\n\t" .
-					((expressions map: :el { string: el }) join: "\n\t") .
-				"}"
-			}
-		}
+		ast lambda: Exprs withArgs: Arglist
 	}
 
 	parenexp <- match: "(" . ws . Expr . ws . ")" where: {