Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions src/pash/compiler/ir.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@
CommandInvocationWithIOVars,
)

from shasta.ast_node import ast_node_to_untyped_deep
from shasta.json_to_ast import to_ast_node

from annotations_utils.util_parsing import parse_arg_list_to_command_invocation
from annotations_utils.util_cmd_invocations import (
Expand Down Expand Up @@ -543,9 +541,7 @@ def to_ast(self, drain_streams) -> "list[AstNode]":
assignment = self.collect_pid_assignment()
asts.append(assignment)

## TODO: Ideally we would like to make them as typed nodes already
class_asts = [to_ast_node(ast_node_to_untyped_deep(ast)) for ast in asts]
return class_asts
return asts

def collect_pid_assignment(self):
## Creates:
Expand Down
9 changes: 7 additions & 2 deletions src/pash/compiler/ir_defs/file_id.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@
import os
import uuid

from util import string_to_argument, make_kv
from util import string_to_argument
from shasta.ast_node import QArgChar



from ir_defs.resource import (
Resource,
FileDescriptorResource,
Expand Down Expand Up @@ -89,7 +93,8 @@ def to_ast(self, stdin_dash=False):
suffix = self.get_fifo_suffix()
string = os.path.join(config.PASH_TMP_PREFIX, suffix)
## Quote the argument
argument = [make_kv("Q", string_to_argument(string))]
argument = [QArgChar(arg=string_to_argument(string))]

elif isinstance(self.resource, FileDescriptorResource):
if self.resource.is_stdin() and stdin_dash:
argument = string_to_argument("-")
Expand Down
7 changes: 2 additions & 5 deletions src/pash/compiler/ir_defs/redirection.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from shasta.ast_node import RedirectionNode, FileRedirNode
from ir_defs.arg import Arg
from util import make_kv, UnparallelizableError
from util import UnparallelizableError

class Redirection:
def __init__(self, redirection: RedirectionNode):
Expand All @@ -24,10 +24,7 @@ def __repr__(self):
)

def to_ast(self):
redir = make_kv(
self.redir_type,
[self.redir_subtype, self.stream_id, self.file_arg.to_ast()],
)
redir = FileRedirNode(self.redir_subtype, self.stream_id, self.file_arg.to_ast())
return redir

def is_to_file(self):
Expand Down
8 changes: 3 additions & 5 deletions src/pash/compiler/ir_to_ast.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
make_subshell,
redir_append_stderr_to_string_file,
)
from shasta.json_to_ast import to_ast_node

from parse import from_ast_objects_to_shell
import config

Expand Down Expand Up @@ -111,8 +111,7 @@ def make_ir_prologue(ephemeral_fids) -> "list[AstNode]":
call_mkfifos = make_command([string_to_argument(MKFIFO_PASH_FIFOS_NAME)])
asts.append(call_mkfifos)

class_asts = [to_ast_node(ast) for ast in asts]
return class_asts
return asts


def make_ir_epilogue(ephemeral_fids, clean_up_graph, log_file) -> "list[AstNode]":
Expand Down Expand Up @@ -148,8 +147,7 @@ def make_ir_epilogue(ephemeral_fids, clean_up_graph, log_file) -> "list[AstNode]
exit_ec_ast = make_exit_ec_ast()
asts.append(exit_ec_ast)

class_asts = [to_ast_node(ast) for ast in asts]
return class_asts
return asts


def make_exit_ec_ast():
Expand Down
46 changes: 27 additions & 19 deletions src/pash/compiler/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,18 @@
import tempfile

import config
from shasta.ast_node import CArgChar
from shasta.ast_node import (
CArgChar,
VArgChar,
QArgChar,
CommandNode,
BackgroundNode,
SubshellNode,
SemiNode,
DefunNode,
AssignNode,
FileRedirNode,
)


# === List utilities ===
Expand Down Expand Up @@ -135,61 +146,58 @@ def string_to_argument(string):


def char_to_arg_char(char):
return ["C", ord(char)]
return CArgChar(ord(char))


def standard_var_ast(string):
return make_kv("V", ["Normal", False, string, []])
return VArgChar("Normal", False, string, [])


def make_quoted_variable(string):
return make_kv("Q", [standard_var_ast(string)])
return QArgChar(arg=[standard_var_ast(string)])


def quote_arg(arg):
return make_kv("Q", arg)
return QArgChar(arg=arg)


def redir_append_stderr_to_string_file(string):
return make_kv("File", ["Append", 2, string_to_argument(string)])

return FileRedirNode("Append", ("fixed", 2), string_to_argument(string))

def redir_stdout_to_file(arg):
return make_kv("File", ["To", 1, arg])
return FileRedirNode("To", ("fixed", 1), arg)


def redir_file_to_stdin(arg):
return make_kv("File", ["From", 0, arg])

return FileRedirNode("From", ("fixed", 0), arg)

def make_background(body, redirections=None):
redirections = [] if redirections is None else redirections
lineno = 0
node = make_kv("Background", [lineno, body, redirections])
node = BackgroundNode(lineno, body, redirections)
return node


def make_subshell(body, redirections=None):
redirections = [] if redirections is None else redirections
lineno = 0
node = make_kv("Subshell", [lineno, body, redirections])
node = SubshellNode(lineno, body, redirections)
return node


def make_command(arguments, redirections=None, assignments=None):
redirections = [] if redirections is None else redirections
assignments = [] if assignments is None else assignments
lineno = 0
node = make_kv("Command", [lineno, assignments, arguments, redirections])
node = CommandNode(lineno, assignments, arguments, redirections)
return node


def make_assignment(var, value):
lineno = 0
assignment = (var, value)
assignments = [assignment]
node = make_kv("Command", [lineno, assignments, [], []])
return node
assignment = AssignNode(var, value)
return CommandNode(lineno, [assignment],[],[])



def make_semi_sequence(asts):
Expand All @@ -203,11 +211,11 @@ def make_semi_sequence(asts):
# Remove the last ast
iter_asts = asts[:-1]
for ast in iter_asts[::-1]:
acc = make_kv("Semi", [ast, acc])
acc = SemiNode(ast, acc)
return acc


def make_defun(name, body):
lineno = 0
node = make_kv("Defun", [lineno, name, body])
node = DefunNode(lineno, string_to_argument(name), body )
return node
Loading