Browse Source

parser: Inline sequences.

Herby Vojčík 4 years ago
parent
commit
25dc722d47
2 changed files with 190 additions and 260 deletions
  1. 179 243
      lang/base/parser.js
  2. 11 17
      lang/base/parser.pegjs

File diff suppressed because it is too large
+ 179 - 243
lang/base/parser.js


+ 11 - 17
lang/base/parser.pegjs

@@ -4,6 +4,10 @@
 	function newNode(nodeClass) {
 		return nodeClass._new()._location_(location())._source_(text());
 	}
+
+	function newSequenceNode(nodeClass, temps, statements) {
+		return newNode(nodeClass)._temps_(temps || [])._dagChildren_(statements || []);
+	}
 }
 
 start = method
@@ -178,20 +182,10 @@ wsStatements =
 	} /
 	expressions:wsExpressions? {return expressions || [];}
 
-wsSequenceWs = aPragmas:wsPragmas? ws temps:temps? zPragmas:wsPragmas? statements:wsStatements? maybeDotsWs {
-	return [newNode($globals.SequenceNode)
-		._temps_(temps || [])
-		._dagChildren_(statements || []), (aPragmas || []).concat(zPragmas || [])];
-}
-
-wsBlockSequenceWs = ws temps:temps? statements:wsStatements? maybeDotsWs {
-	return newNode($globals.BlockSequenceNode)
-		._temps_(temps || [])
-		._dagChildren_(statements || []);
-}
-
-block = '[' params:wsBlockParamList? sequence:wsBlockSequenceWs ']' {
-	return newNode($globals.BlockNode)._parameters_(params || [])._dagChildren_([sequence]);
+block = '[' params:wsBlockParamList? ws temps:temps? statements:wsStatements? maybeDotsWs ']' {
+	return newNode($globals.BlockNode)
+		._parameters_(params || [])
+		._dagChildren_([newSequenceNode($globals.BlockSequenceNode, temps, statements)]);
 }
 
 operand = reference / literal / subexpression
@@ -247,12 +241,12 @@ cascade =
 
 method =
 	pattern:(wsKeywordPattern / wsBinaryPattern / wsUnaryPattern)
-	sequence:wsSequenceWs {
+	aPragmas:wsPragmas? ws temps:temps? zPragmas:wsPragmas? statements:wsStatements? maybeDotsWs {
 		return newNode($globals.MethodNode)
 			._selector_(pattern[0])
 			._arguments_(pattern[1])
-			._pragmas_(sequence[1])
-			._dagChildren_([sequence[0]]);
+			._pragmas_((aPragmas || []).concat(zPragmas || []))
+			._dagChildren_([newSequenceNode($globals.SequenceNode, temps, statements)]);
 	}
 
 associationSend =

Some files were not shown because too many files changed in this diff