Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Running transformer pass 'apply_includes'
- Running transformer pass 'rewrite_namespaces'
- Running transformer pass 'elide_groupings'
- Running transformer pass 'fold_constants'
- Running transformer pass 'elide_branches'
- Running transformer pass 'strip_seps'
- Running transformer pass 'predefine_types'
- Running transformer pass 'define_types'
- FileNode: (N_Statements=28)
- |0- FileNode: (N_Statements=99)
- |0- SepExpr (Consumed=1)
- |1- IntrinsicExpr: '@declare_c_func("printf", "int", "(...)")@'
- |2- SepExpr (Consumed=1)
- |3- IntrinsicExpr: '@declare_c_func("puts", "int", "(i8*)")@'
- |4- SepExpr (Consumed=1)
- |5- IntrinsicExpr: '@declare_c_func("system", "int", "(i8*)")@'
- |6- SepExpr (Consumed=1)
- |7- IntrinsicExpr: '@declare_c_func("sprintf", "int", "(...)")@'
- |8- SepExpr (Consumed=1)
- |9- IntrinsicExpr: '@declare_c_func("scanf", "int", "(...)")@'
- |10- SepExpr (Consumed=1)
- |11- IntrinsicExpr: '@declare_c_func("malloc", "ptr", "(i32)")@'
- |12- SepExpr (Consumed=1)
- |13- IntrinsicExpr: '@declare_c_func("usleep", "void", "(i32)")@'
- |14- SepExpr (Consumed=1)
- |15- IntrinsicExpr: '@declare_c_func("realloc", "ptr", "(i8*, i32)")@'
- |16- SepExpr (Consumed=1)
- |17- IntrinsicExpr: '@declare_c_func("strcat", "cstr", "(i8*, i8*)")@'
- |18- SepExpr (Consumed=1)
- |19- IntrinsicExpr: '@declare_c_func("memcpy", "void", "(i8*, i8*, i32)")@'
- |20- SepExpr (Consumed=1)
- |21- IntrinsicExpr: '@declare_c_func("memset", "void", "(i8*, i32, i32)")@'
- |22- SepExpr (Consumed=1)
- |23- IntrinsicExpr: '@declare_c_func("strcpy", "cstr", "(i8*, i8*)")@'
- |24- SepExpr (Consumed=1)
- |25- IntrinsicExpr: '@declare_c_func("strncpy", "void", "(i8*, i8*, i32)")@'
- |26- SepExpr (Consumed=1)
- |27- IntrinsicExpr: '@declare_c_func("strlen", "int", "(i8*)")@'
- |28- SepExpr (Consumed=1)
- |29- IntrinsicExpr: '@declare_c_func("atoi", "int", "(i8*)")@'
- |30- SepExpr (Consumed=1)
- |31- IntrinsicExpr: '@declare_c_func("strtod", "float", "(i8*, i8*)")@'
- |32- SepExpr (Consumed=1)
- |33- IntrinsicExpr: '@declare_c_func("strcmp", "int", "(i8*, i8*)")@'
- |34- SepExpr (Consumed=1)
- |35- IntrinsicExpr: '@declare_c_func("strncmp", "int", "(i8*, i8*, i32)")@'
- |36- SepExpr (Consumed=1)
- |37- IntrinsicExpr: '@declare_c_func("free", "void", "(i8*)")@'
- |38- SepExpr (Consumed=1)
- |39- IntrinsicExpr: '@declare_c_func("exit", "int", "(i32)")@'
- |40- SepExpr (Consumed=1)
- |41- IntrinsicExpr: '@declare_c_func("clock", "long", "()")@'
- |42- SepExpr (Consumed=2)
- |43- FunctionDecl:
- |- Head: FunctionDeclHead: Name='cstr:__add__' Type='cstr' Nargs=2
- |0- cstr a
- \1- cstr b
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'cstr result'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: CallExpr:
- |- Method: NameExpr: 'strlen'
- \- Arguments: (Len=1)
- \0- NameExpr: 'a'
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: CallExpr:
- |- Method: NameExpr: 'strlen'
- \- Arguments: (Len=1)
- \0- NameExpr: 'b'
- \- RHS: LiteralExpr: type=int, value=1
- |1- CallExpr:
- |- Method: NameExpr: 'strcpy'
- \- Arguments: (Len=2)
- |0- NameExpr: 'result'
- \1- NameExpr: 'a'
- |2- CallExpr:
- |- Method: NameExpr: 'strcat'
- \- Arguments: (Len=2)
- |0- NameExpr: 'result'
- \1- NameExpr: 'b'
- \3- ReturnExpr: NameExpr: 'result'
- |44- SepExpr (Consumed=2)
- |45- FunctionDecl:
- |- Head: FunctionDeclHead: Name='cstr:__mul__' Type='cstr' Nargs=2
- |0- cstr a
- \1- int b
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int sz'
- \- RHS: BinOpExpr (Operator='*')
- |- LHS: CallExpr:
- |- Method: NameExpr: 'strlen'
- \- Arguments: (Len=1)
- \0- NameExpr: 'a'
- \- RHS: NameExpr: 'b'
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'sz'
- \- RHS: LiteralExpr: type=int, value=1
- |2- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'cstr result'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- NameExpr: 'sz'
- |3- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int idx'
- \- RHS: NameExpr: 'b'
- |4- WhileExpr:
- |- Condition: BinOpExpr (Operator='>')
- |- LHS: NameExpr: 'b'
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='-=')
- |- LHS: NameExpr: 'b'
- \- RHS: LiteralExpr: type=int, value=1
- |1- CallExpr:
- |- Method: NameExpr: 'strcat'
- \- Arguments: (Len=2)
- |0- NameExpr: 'result'
- \1- NameExpr: 'a'
- \5- ReturnExpr: NameExpr: 'result'
- |46- SepExpr (Consumed=2)
- |47- FunctionDecl:
- |- Head: FunctionDeclHead: Name='bool:or' Type='bool' Nargs=2
- |0- bool a
- \1- bool b
- |0- IfExpr:
- |- Condition: NameExpr: 'a'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: NameExpr: 'a'
- \1- ReturnExpr: NameExpr: 'b'
- |48- SepExpr (Consumed=2)
- |49- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ptr:offset' Type='ptr' Nargs=2
- |0- ptr a
- \1- int b
- \0- ReturnExpr: CastExpr (Target='ptr')
- \- Value: BinOpExpr (Operator='+')
- |- LHS: CastExpr (Target='long')
- \- Value: NameExpr: 'a'
- \- RHS: CastExpr (Target='long')
- \- Value: NameExpr: 'b'
- |50- SepExpr (Consumed=2)
- |51- FunctionDecl:
- |- Head: FunctionDeclHead: Name='cstr:offset' Type='cstr' Nargs=2
- |0- cstr a
- \1- int b
- \0- ReturnExpr: CastExpr (Target='cstr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CastExpr (Target='ptr')
- \- Value: NameExpr: 'a'
- \- Field: offset
- \- Arguments: (Len=1)
- \0- NameExpr: 'b'
- |52- SepExpr (Consumed=2)
- |53- FunctionDecl:
- |- Head: FunctionDeclHead: Name='cstr:__eq__' Type='bool' Nargs=2
- |0- cstr a
- \1- cstr b
- \0- ReturnExpr: BinOpExpr (Operator='==')
- |- LHS: CallExpr:
- |- Method: NameExpr: 'strcmp'
- \- Arguments: (Len=2)
- |0- NameExpr: 'a'
- \1- NameExpr: 'b'
- \- RHS: LiteralExpr: type=int, value=0
- |54- SepExpr (Consumed=2)
- |55- FunctionDecl:
- |- Head: FunctionDeclHead: Name='cstr:__ne__' Type='bool' Nargs=2
- |0- cstr a
- \1- cstr b
- \0- ReturnExpr: BinOpExpr (Operator='!=')
- |- LHS: CallExpr:
- |- Method: NameExpr: 'strcmp'
- \- Arguments: (Len=2)
- |0- NameExpr: 'a'
- \1- NameExpr: 'b'
- \- RHS: LiteralExpr: type=int, value=0
- |56- SepExpr (Consumed=2)
- |57- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ptr:__eq__' Type='bool' Nargs=2
- |0- ptr a
- \1- ptr b
- \0- ReturnExpr: BinOpExpr (Operator='==')
- |- LHS: CastExpr (Target='long')
- \- Value: NameExpr: 'a'
- \- RHS: CastExpr (Target='long')
- \- Value: NameExpr: 'b'
- |58- SepExpr (Consumed=2)
- |59- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ptr:__ne__' Type='bool' Nargs=2
- |0- ptr a
- \1- ptr b
- \0- ReturnExpr: BinOpExpr (Operator='!=')
- |- LHS: CastExpr (Target='long')
- \- Value: NameExpr: 'a'
- \- RHS: CastExpr (Target='long')
- \- Value: NameExpr: 'b'
- |60- SepExpr (Consumed=2)
- |61- FunctionDecl:
- |- Head: FunctionDeclHead: Name='cstr:free' Type='void' Nargs=1
- \0- cstr s
- |0- CallExpr:
- |- Method: NameExpr: 'free'
- \- Arguments: (Len=1)
- \0- NameExpr: 's'
- \1- ReturnExpr: <void>
- |62- SepExpr (Consumed=2)
- |63- FunctionDecl:
- |- Head: FunctionDeclHead: Name='cstr:copy' Type='cstr' Nargs=1
- \0- cstr s
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'cstr n'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 's'
- \- Field: len
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=1
- |1- CallExpr:
- |- Method: NameExpr: 'strcat'
- \- Arguments: (Len=2)
- |0- NameExpr: 'n'
- \1- NameExpr: 's'
- \2- ReturnExpr: NameExpr: 'n'
- |64- SepExpr (Consumed=2)
- |65- FunctionDecl:
- |- Head: FunctionDeclHead: Name='cstr:int' Type='int' Nargs=1
- \0- cstr s
- \0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'atoi'
- \- Arguments: (Len=1)
- \0- NameExpr: 's'
- |66- SepExpr (Consumed=2)
- |67- FunctionDecl:
- |- Head: FunctionDeclHead: Name='cstr:float' Type='float' Nargs=1
- \0- cstr s
- \0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'strtod'
- \- Arguments: (Len=2)
- |0- NameExpr: 's'
- \1- LiteralExpr: type=ptr, value=0
- |68- SepExpr (Consumed=2)
- |69- FunctionDecl:
- |- Head: FunctionDeclHead: Name='byte:in' Type='bool' Nargs=2
- |0- byte b
- \1- cstr s
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int len'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 's'
- \- Field: len
- \- Arguments: (Len=0)
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: NameExpr: 'len'
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: IndexExpr
- |- Array: NameExpr: 's'
- \- Value: NameExpr: 'i'
- \- RHS: NameExpr: 'b'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CastExpr (Target='bool')
- \- Value: LiteralExpr: type=int, value=1
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: CastExpr (Target='bool')
- \- Value: LiteralExpr: type=int, value=0
- |70- SepExpr (Consumed=2)
- |71- FunctionDecl:
- |- Head: FunctionDeclHead: Name='cstr:len' Type='int' Nargs=1
- \0- cstr s
- \0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'strlen'
- \- Arguments: (Len=1)
- \0- NameExpr: 's'
- |72- SepExpr (Consumed=2)
- |73- FunctionDecl:
- |- Head: FunctionDeclHead: Name='cstr:substr' Type='cstr' Nargs=3
- |0- cstr s
- |1- int start
- \2- int len
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'cstr res'
- \- RHS: CastExpr (Target='cstr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'len'
- \- RHS: LiteralExpr: type=int, value=1
- |1- CallExpr:
- |- Method: NameExpr: 'strncpy'
- \- Arguments: (Len=3)
- |0- NameExpr: 'res'
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 's'
- \- Field: offset
- \- Arguments: (Len=1)
- \0- NameExpr: 'start'
- \2- NameExpr: 'len'
- |2- AssignmentExpr (Operator='=')
- |- LHS: IndexExpr
- |- Array: NameExpr: 'res'
- \- Value: NameExpr: 'len'
- \- RHS: CastExpr (Target='byte')
- \- Value: LiteralExpr: type=int, value=0
- \3- ReturnExpr: NameExpr: 'res'
- |74- SepExpr (Consumed=2)
- |75- FunctionDecl:
- |- Head: FunctionDeclHead: Name='cstr:equals_l' Type='bool' Nargs=3
- |0- cstr s
- |1- cstr o
- \2- int l
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: NameExpr: 'l'
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: IndexExpr
- |- Array: NameExpr: 's'
- \- Value: NameExpr: 'i'
- \- RHS: IndexExpr
- |- Array: NameExpr: 'o'
- \- Value: NameExpr: 'i'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=bool, value=0
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \2- ReturnExpr: LiteralExpr: type=bool, value=1
- |76- SepExpr (Consumed=2)
- |77- FunctionDecl:
- |- Head: FunctionDeclHead: Name='cstr:startswith' Type='bool' Nargs=2
- |0- cstr s
- \1- cstr o
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 's'
- \- Field: equals_l
- \- Arguments: (Len=2)
- |0- NameExpr: 'o'
- \1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'o'
- \- Field: len
- \- Arguments: (Len=0)
- |78- SepExpr (Consumed=2)
- |79- FunctionDecl:
- |- Head: FunctionDeclHead: Name='cstr:find' Type='int' Nargs=2
- |0- cstr s
- \1- cstr t
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int pos'
- \- RHS: LiteralExpr: type=int, value=0
- |1- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'pos'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 's'
- \- Field: len
- \- Arguments: (Len=0)
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: CallExpr:
- |- Method: NameExpr: 'strncmp'
- \- Arguments: (Len=3)
- |0- NameExpr: 't'
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 's'
- \- Field: offset
- \- Arguments: (Len=1)
- \0- NameExpr: 'pos'
- \2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: len
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: NameExpr: 'pos'
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'pos'
- \- RHS: LiteralExpr: type=int, value=1
- \2- ReturnExpr: UnOpExpr (Operator='-')
- \- Value: LiteralExpr: type=int, value=1
- |80- SepExpr (Consumed=2)
- |81- FunctionDecl:
- |- Head: FunctionDeclHead: Name='cstr:contains' Type='bool' Nargs=2
- |0- cstr s
- \1- cstr t
- \0- ReturnExpr: BinOpExpr (Operator='!=')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 's'
- \- Field: find
- \- Arguments: (Len=1)
- \0- NameExpr: 't'
- \- RHS: UnOpExpr (Operator='-')
- \- Value: LiteralExpr: type=int, value=1
- |82- SepExpr (Consumed=2)
- |83- FunctionDecl:
- |- Head: FunctionDeclHead: Name='int:str' Type='cstr' Nargs=1
- \0- int i
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'cstr str'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=50
- |1- CallExpr:
- |- Method: NameExpr: 'sprintf'
- \- Arguments: (Len=3)
- |0- NameExpr: 'str'
- |1- LiteralExpr: type=cstr, value=%i
- \2- NameExpr: 'i'
- \2- ReturnExpr: NameExpr: 'str'
- |84- SepExpr (Consumed=2)
- |85- FunctionDecl:
- |- Head: FunctionDeclHead: Name='float:str' Type='cstr' Nargs=1
- \0- float i
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'cstr str'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=50
- |1- CallExpr:
- |- Method: NameExpr: 'sprintf'
- \- Arguments: (Len=3)
- |0- NameExpr: 'str'
- |1- LiteralExpr: type=cstr, value=%f
- \2- NameExpr: 'i'
- \2- ReturnExpr: NameExpr: 'str'
- |86- SepExpr (Consumed=2)
- |87- FunctionDecl:
- |- Head: FunctionDeclHead: Name='bool:str' Type='cstr' Nargs=1
- \0- bool b
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CastExpr (Target='int')
- \- Value: NameExpr: 'b'
- \- Field: str
- \- Arguments: (Len=0)
- |88- SepExpr (Consumed=2)
- |89- TypeDecl:
- |- Head: TypeDeclHead: `_STDReadIntBox` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=1)
- \0- DeclExpr: 'int i'
- |90- SepExpr (Consumed=2)
- |91- FunctionDecl:
- |- Head: FunctionDeclHead: Name='read_int' Type='int' Nargs=1
- \0- cstr prompt
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: '_STDReadIntBox box'
- \- RHS: CastExpr (Target='_STDReadIntBox')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(int)@'
- |1- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- NameExpr: 'prompt'
- |2- CallExpr:
- |- Method: NameExpr: 'scanf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=%d
- \1- NameExpr: 'box'
- |3- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int result'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'box'
- \- Field: i
- |4- CallExpr:
- |- Method: NameExpr: 'free'
- \- Arguments: (Len=1)
- \0- NameExpr: 'box'
- \5- ReturnExpr: NameExpr: 'result'
- |92- SepExpr (Consumed=2)
- |93- FunctionDecl:
- |- Head: FunctionDeclHead: Name='read_line' Type='cstr' Nargs=1
- \0- cstr prompt
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'cstr result'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=256
- |1- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- NameExpr: 'prompt'
- |2- CallExpr:
- |- Method: NameExpr: 'scanf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=%s
- \1- NameExpr: 'result'
- \3- ReturnExpr: NameExpr: 'result'
- |94- SepExpr (Consumed=2)
- |95- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ord' Type='int' Nargs=1
- \0- cstr c
- \0- ReturnExpr: CastExpr (Target='int')
- \- Value: IndexExpr
- |- Array: NameExpr: 'c'
- \- Value: LiteralExpr: type=int, value=0
- |96- SepExpr (Consumed=2)
- |97- FunctionDecl:
- |- Head: FunctionDeclHead: Name='prints' Type='void' Nargs=1
- \0- cstr s
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=%s
- \1- NameExpr: 's'
- \1- ReturnExpr: <void>
- |98- SepExpr (Consumed=1)
- |1- FileNode: (N_Statements=15)
- |0- SepExpr (Consumed=1)
- |1- IntrinsicExpr: '@declare_c_func("fopen", "ptr", "(i8*, i8*)")@'
- |2- SepExpr (Consumed=2)
- |3- IntrinsicExpr: '@declare_c_func("fprintf", "void", "(...)")@'
- |4- SepExpr (Consumed=2)
- |5- IntrinsicExpr: '@declare_c_func("fclose", "void", "(i8*)")@'
- |6- SepExpr (Consumed=2)
- |7- IntrinsicExpr: '@declare_c_func("fflush", "void", "(i8*)")@'
- |8- SepExpr (Consumed=2)
- |9- IntrinsicExpr: '@declare_c_func("fgets", "ptr", "(i8*, i32, i8*)")@'
- |10- SepExpr (Consumed=2)
- |11- FileNode: (N_Statements=33)
- |0- SepExpr (Consumed=1)
- |1- FileNode: (N_Statements=67)
- |0- SepExpr (Consumed=1)
- |1- SepExpr (Consumed=1)
- |2- SepExpr (Consumed=2)
- |3- TypeDecl:
- |- Head: TypeDeclHead: `MemArena` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=0)
- \- Body: TypeDeclBody: (N_Statements=12)
- |0- DeclExpr: 'ptr allocation'
- |1- DeclExpr: 'int position'
- |2- DeclExpr: 'ptr last_alloc'
- |3- DeclExpr: 'int last_alloc_amount'
- |4- DeclExpr: 'int arena_size'
- |5- DeclExpr: 'int layer_id'
- |6- DeclExpr: 'MemArena _next'
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='MemArena::new' Type='MemArena' Nargs=2
- |0- int size
- \1- int layer
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'MemArena new'
- \- RHS: CastExpr (Target='MemArena')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'mem'
- \- Field: alloc_unmanaged
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(MemArena)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: arena_size
- \- RHS: NameExpr: 'size'
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: allocation
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'mem'
- \- Field: alloc_unmanaged
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: arena_size
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: position
- \- RHS: LiteralExpr: type=int, value=0
- |4- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: layer_id
- \- RHS: NameExpr: 'layer'
- |5- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: _next
- \- RHS: CastExpr (Target='MemArena')
- \- Value: LiteralExpr: type=ptr, value=0
- \6- ReturnExpr: NameExpr: 'new'
- |8- FunctionDecl:
- |- Head: FunctionDeclHead: Name='MemArena:allocate' Type='ptr' Nargs=2
- |0- MemArena self
- \1- int amount
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'amount'
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: LiteralExpr: type=int, value=8
- \- RHS: GroupingExpr: BinOpExpr (Operator='%')
- |- LHS: NameExpr: 'amount'
- \- RHS: LiteralExpr: type=int, value=8
- |1- AssignmentExpr (Operator='+=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: position
- \- RHS: NameExpr: 'amount'
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: last_alloc_amount
- \- RHS: NameExpr: 'amount'
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: last_alloc
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: allocation
- \- Field: offset
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: position
- \- RHS: NameExpr: 'amount'
- \4- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: last_alloc
- |9- FunctionDecl:
- |- Head: FunctionDeclHead: Name='MemArena:has_room' Type='bool' Nargs=2
- |0- MemArena self
- \1- int amount
- \0- ReturnExpr: BinOpExpr (Operator='>=')
- |- LHS: GroupingExpr: BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: arena_size
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: position
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'amount'
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: LiteralExpr: type=int, value=1
- \- RHS: GroupingExpr: BinOpExpr (Operator='-')
- |- LHS: LiteralExpr: type=int, value=8
- \- RHS: GroupingExpr: BinOpExpr (Operator='%')
- |- LHS: NameExpr: 'amount'
- \- RHS: LiteralExpr: type=int, value=8
- |10- FunctionDecl:
- |- Head: FunctionDeclHead: Name='MemArena:try_free' Type='void' Nargs=2
- |0- MemArena self
- \1- ptr ob
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'ob'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: last_alloc
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='-=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: position
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: last_alloc_amount
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: last_alloc
- \- RHS: CastExpr (Target='ptr')
- \- Value: LiteralExpr: type=int, value=0
- \1- ReturnExpr: <void>
- \11- FunctionDecl:
- |- Head: FunctionDeclHead: Name='MemArena:free' Type='void' Nargs=1
- \0- MemArena self
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'mem'
- \- Field: free_unmanaged
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: allocation
- |1- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'mem'
- \- Field: free_unmanaged
- \- Arguments: (Len=1)
- \0- NameExpr: 'self'
- \2- ReturnExpr: <void>
- |4- SepExpr (Consumed=2)
- |5- DeclExpr: 'MemArena __mem_head_arena'
- |6- SepExpr (Consumed=1)
- |7- DeclExpr: 'MemArena __mem_tail_arena'
- |8- SepExpr (Consumed=1)
- |9- DeclExpr: 'int __mem_arena_min_sz'
- |10- SepExpr (Consumed=1)
- |11- DeclExpr: 'int __mem_arena_curr_layer'
- |12- SepExpr (Consumed=2)
- |13- FunctionDecl:
- |- Head: FunctionDeclHead: Name='mem::arena::alloc' Type='ptr' Nargs=1
- \0- int amount
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: '__mem_tail_arena'
- \- Field: has_room
- \- Arguments: (Len=1)
- \0- NameExpr: 'amount'
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: '__mem_tail_arena'
- \- Field: _next
- \- RHS: CallExpr:
- |- Method: NameExpr: 'MemArena$$new'
- \- Arguments: (Len=2)
- |0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'amount'
- \- RHS: NameExpr: '__mem_arena_min_sz'
- \1- NameExpr: '__mem_arena_curr_layer'
- |1- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__mem_tail_arena'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: '__mem_tail_arena'
- \- Field: _next
- \1- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: '__mem_tail_arena'
- \- Field: allocate
- \- Arguments: (Len=1)
- \0- NameExpr: 'amount'
- |14- SepExpr (Consumed=2)
- |15- FunctionDecl:
- |- Head: FunctionDeclHead: Name='mem::arena::free' Type='void' Nargs=1
- \0- ptr ob
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: '__mem_tail_arena'
- \- Field: try_free
- \- Arguments: (Len=1)
- \0- NameExpr: 'ob'
- \1- ReturnExpr: <void>
- |16- SepExpr (Consumed=2)
- |17- FunctionDecl:
- |- Head: FunctionDeclHead: Name='mem::arena::push_arena' Type='void' Nargs=0
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: '__mem_arena_curr_layer'
- \- RHS: LiteralExpr: type=int, value=1
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: '__mem_tail_arena'
- \- Field: _next
- \- RHS: CallExpr:
- |- Method: NameExpr: 'MemArena$$new'
- \- Arguments: (Len=2)
- |0- NameExpr: '__mem_arena_min_sz'
- \1- NameExpr: '__mem_arena_curr_layer'
- |2- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__mem_tail_arena'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: '__mem_tail_arena'
- \- Field: _next
- \3- ReturnExpr: <void>
- |18- SepExpr (Consumed=2)
- |19- FunctionDecl:
- |- Head: FunctionDeclHead: Name='mem::arena::pop_arena' Type='void' Nargs=0
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'MemArena curr'
- \- RHS: NameExpr: '__mem_head_arena'
- |1- DeclExpr: 'MemArena next'
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: CastExpr (Target='ptr')
- \- Value: NameExpr: 'curr'
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'next'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: _next
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: layer_id
- \- RHS: NameExpr: '__mem_arena_curr_layer'
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'curr'
- \- Field: free
- \- Arguments: (Len=0)
- |2- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'curr'
- \- RHS: NameExpr: 'next'
- |3- AssignmentExpr (Operator='-=')
- |- LHS: NameExpr: '__mem_arena_curr_layer'
- \- RHS: LiteralExpr: type=int, value=1
- \4- ReturnExpr: <void>
- |20- SepExpr (Consumed=2)
- |21- FunctionDecl:
- |- Head: FunctionDeclHead: Name='mem::arena::clean_up' Type='void' Nargs=0
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'MemArena curr'
- \- RHS: NameExpr: '__mem_head_arena'
- |1- DeclExpr: 'MemArena next'
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: CastExpr (Target='ptr')
- \- Value: NameExpr: 'curr'
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'next'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: _next
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'curr'
- \- Field: free
- \- Arguments: (Len=0)
- |2- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'curr'
- \- RHS: NameExpr: 'next'
- \3- ReturnExpr: <void>
- |22- SepExpr (Consumed=2)
- |23- FunctionDecl:
- |- Head: FunctionDeclHead: Name='mem::init_arena_allocator' Type='void' Nargs=1
- \0- int min_arena_sz
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__mem_arena_min_sz'
- \- RHS: NameExpr: 'min_arena_sz'
- |1- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__mem_arena_curr_layer'
- \- RHS: LiteralExpr: type=int, value=0
- |2- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__mem_head_arena'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'MemArena$$new'
- \- Arguments: (Len=2)
- |0- NameExpr: '__mem_arena_min_sz'
- \1- NameExpr: '__mem_arena_curr_layer'
- |3- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__mem_tail_arena'
- \- RHS: NameExpr: '__mem_head_arena'
- |4- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__mem_allocator'
- \- RHS: CastExpr (Target='MemAllocator')
- \- Value: NameExpr: 'mem$$arena$$alloc'
- |5- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__mem_deallocator'
- \- RHS: CastExpr (Target='MemDeallocator')
- \- Value: NameExpr: 'mem$$arena$$free'
- |6- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__mem_cleaner'
- \- RHS: CastExpr (Target='MemCleaner')
- \- Value: NameExpr: 'mem$$arena$$clean_up'
- \7- ReturnExpr: <void>
- |24- SepExpr (Consumed=2)
- |25- TypeDeclHead: `MemAllocator` (Is_Func_Alias=1, Is_Type_Alias:0, Is_Packed=0) Aliases Function->`ptr`
- |26- SepExpr (Consumed=1)
- |27- TypeDeclHead: `MemDeallocator` (Is_Func_Alias=1, Is_Type_Alias:0, Is_Packed=0) Aliases Function->`void`
- |28- SepExpr (Consumed=1)
- |29- TypeDeclHead: `MemCleaner` (Is_Func_Alias=1, Is_Type_Alias:0, Is_Packed=0) Aliases Function->`void`
- |30- SepExpr (Consumed=2)
- |31- DeclExpr: 'MemAllocator __mem_allocator'
- |32- SepExpr (Consumed=1)
- |33- DeclExpr: 'MemDeallocator __mem_deallocator'
- |34- SepExpr (Consumed=1)
- |35- DeclExpr: 'MemCleaner __mem_cleaner'
- |36- SepExpr (Consumed=2)
- |37- DeclExpr: 'int __mem_total_unmanaged_allocs'
- |38- SepExpr (Consumed=2)
- |39- FunctionDecl:
- |- Head: FunctionDeclHead: Name='mem::alloc' Type='ptr' Nargs=1
- \0- int amount
- \0- ReturnExpr: CallExpr:
- |- Method: NameExpr: '__mem_allocator'
- \- Arguments: (Len=1)
- \0- NameExpr: 'amount'
- |40- SepExpr (Consumed=2)
- |41- FunctionDecl:
- |- Head: FunctionDeclHead: Name='mem::alloc_unmanaged' Type='ptr' Nargs=1
- \0- int amount
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: '__mem_total_unmanaged_allocs'
- \- RHS: LiteralExpr: type=int, value=1
- \1- ReturnExpr: CallExpr:
- |- Method: NameExpr: '__raw_malloc'
- \- Arguments: (Len=1)
- \0- NameExpr: 'amount'
- |42- SepExpr (Consumed=2)
- |43- FunctionDecl:
- |- Head: FunctionDeclHead: Name='mem::free' Type='void' Nargs=1
- \0- ptr ob
- |0- CallExpr:
- |- Method: NameExpr: '__mem_deallocator'
- \- Arguments: (Len=1)
- \0- NameExpr: 'ob'
- \1- ReturnExpr: <void>
- |44- SepExpr (Consumed=2)
- |45- FunctionDecl:
- |- Head: FunctionDeclHead: Name='mem::free_unmanaged' Type='void' Nargs=1
- \0- ptr ob
- |0- AssignmentExpr (Operator='-=')
- |- LHS: NameExpr: '__mem_total_unmanaged_allocs'
- \- RHS: LiteralExpr: type=int, value=1
- |1- CallExpr:
- |- Method: NameExpr: '__raw_free'
- \- Arguments: (Len=1)
- \0- NameExpr: 'ob'
- \2- ReturnExpr: <void>
- |46- SepExpr (Consumed=2)
- |47- FunctionDecl:
- |- Head: FunctionDeclHead: Name='mem::raw_free' Type='void' Nargs=1
- \0- ptr ob
- |0- CallExpr:
- |- Method: NameExpr: '__raw_free'
- \- Arguments: (Len=1)
- \0- NameExpr: 'ob'
- \1- ReturnExpr: <void>
- |48- SepExpr (Consumed=2)
- |49- FunctionDecl:
- |- Head: FunctionDeclHead: Name='mem::__empty' Type='void' Nargs=0
- \0- ReturnExpr: <void>
- |50- SepExpr (Consumed=2)
- |51- IntrinsicExpr: '@set_autoconv("mem::free_unmanaged")@'
- |52- SepExpr (Consumed=2)
- |53- FunctionDecl:
- |- Head: FunctionDeclHead: Name='mem::init_default_allocator' Type='void' Nargs=0
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__mem_allocator'
- \- RHS: CastExpr (Target='MemAllocator')
- \- Value: NameExpr: 'mem$$alloc_unmanaged'
- |1- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__mem_deallocator'
- \- RHS: CastExpr (Target='MemDeallocator')
- \- Value: NameExpr: 'mem$$free_unmanaged'
- |2- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__mem_cleaner'
- \- RHS: CastExpr (Target='MemCleaner')
- \- Value: NameExpr: 'mem$$__empty'
- \3- ReturnExpr: <void>
- |54- SepExpr (Consumed=2)
- |55- FunctionDecl:
- |- Head: FunctionDeclHead: Name='mem::clean_up' Type='void' Nargs=0
- |0- CallExpr:
- |- Method: NameExpr: '__mem_cleaner'
- \- Arguments: (Len=0)
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int excusable'
- \- RHS: LiteralExpr: type=int, value=0
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: CastExpr (Target='ptr')
- \- Value: NameExpr: '__stack'
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'excusable'
- \- RHS: LiteralExpr: type=int, value=3
- |3- IfExpr:
- |- Condition: BinOpExpr (Operator='>')
- |- LHS: NameExpr: '__mem_total_unmanaged_allocs'
- \- RHS: NameExpr: 'excusable'
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=W: Did not free all memory, %i allocations unfreed\n
- \1- BinOpExpr (Operator='-')
- |- LHS: NameExpr: '__mem_total_unmanaged_allocs'
- \- RHS: NameExpr: 'excusable'
- \4- ReturnExpr: <void>
- |56- SepExpr (Consumed=2)
- |57- IntrinsicExpr: '@construct_signature("__raw_malloc", "malloc", ["int"], "ptr")@'
- |58- SepExpr (Consumed=1)
- |59- IntrinsicExpr: '@construct_signature("__raw_free", "free", ["ptr"], "void", auto_conv=True)@'
- |60- SepExpr (Consumed=1)
- |61- IntrinsicExpr: '@construct_signature("malloc", "mem::alloc", ["int"], "ptr")@'
- |62- SepExpr (Consumed=1)
- |63- IntrinsicExpr: '@construct_signature("free", "mem::free", ["ptr"], "void", auto_conv=True)@'
- |64- SepExpr (Consumed=1)
- |65- IntrinsicExpr: '@register_startup("mem::init_default_allocator")@'
- |66- SepExpr (Consumed=1)
- |2- SepExpr (Consumed=2)
- |3- TypeDecl:
- |- Head: TypeDeclHead: `_StackNode` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=0)
- \- Body: TypeDeclBody: (N_Statements=3)
- |0- DeclExpr: '_StackNode _next'
- |1- DeclExpr: '_StackNode _prev'
- \2- DeclExpr: 'cstr name'
- |4- SepExpr (Consumed=2)
- |5- DeclExpr: '_StackNode __stack'
- |6- SepExpr (Consumed=1)
- |7- DeclExpr: '_StackNode __stack_tail'
- |8- SepExpr (Consumed=2)
- |9- TypeDeclHead: `AddtlEnterExitCallback` (Is_Func_Alias=1, Is_Type_Alias:0, Is_Packed=0) Aliases Function->`void`
- |10- SepExpr (Consumed=2)
- |11- DeclExpr: 'AddtlEnterExitCallback __fex_addtl_callback_enter'
- |12- SepExpr (Consumed=1)
- |13- DeclExpr: 'AddtlEnterExitCallback __fex_addtl_callback_exit'
- |14- SepExpr (Consumed=1)
- |15- DeclExpr: 'bool __in_err'
- |16- SepExpr (Consumed=2)
- |17- FunctionDecl:
- |- Head: FunctionDeclHead: Name='orth::internal::hooks::function_enter_hook' Type='void' Nargs=1
- \0- cstr name
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: CastExpr (Target='int')
- \- Value: CastExpr (Target='ptr')
- \- Value: NameExpr: '__stack'
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: <void>
- |1- IfExpr:
- |- Condition: NameExpr: '__in_err'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: <void>
- |2- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__in_err'
- \- RHS: LiteralExpr: type=bool, value=1
- |3- IfExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: CastExpr (Target='int')
- \- Value: CastExpr (Target='ptr')
- \- Value: NameExpr: '__fex_addtl_callback_enter'
- \- RHS: CastExpr (Target='int')
- \- Value: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: '__fex_addtl_callback_enter'
- \- Arguments: (Len=1)
- \0- NameExpr: 'name'
- |4- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: '_StackNode new'
- \- RHS: CastExpr (Target='_StackNode')
- \- Value: CallExpr:
- |- Method: NameExpr: 'mem$$alloc_unmanaged'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(_StackNode)@'
- |5- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: _next
- \- RHS: CastExpr (Target='_StackNode')
- \- Value: LiteralExpr: type=ptr, value=0
- |6- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: _prev
- \- RHS: CastExpr (Target='_StackNode')
- \- Value: LiteralExpr: type=ptr, value=0
- |7- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: name
- \- RHS: NameExpr: 'name'
- |8- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: '__stack_tail'
- \- Field: _next
- \- RHS: NameExpr: 'new'
- |9- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: _prev
- \- RHS: NameExpr: '__stack_tail'
- |10- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__stack_tail'
- \- RHS: NameExpr: 'new'
- |11- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__in_err'
- \- RHS: LiteralExpr: type=bool, value=0
- \12- ReturnExpr: <void>
- |18- SepExpr (Consumed=2)
- |19- FunctionDecl:
- |- Head: FunctionDeclHead: Name='orth::internal::hooks::function_exit_hook' Type='void' Nargs=1
- \0- cstr name
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: CastExpr (Target='int')
- \- Value: CastExpr (Target='ptr')
- \- Value: NameExpr: '__stack'
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: <void>
- |1- IfExpr:
- |- Condition: NameExpr: '__in_err'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: <void>
- |2- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__in_err'
- \- RHS: LiteralExpr: type=bool, value=1
- |3- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: CastExpr (Target='int')
- \- Value: CastExpr (Target='ptr')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: '__stack'
- \- Field: _next
- \- RHS: CastExpr (Target='int')
- \- Value: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: <void>
- |4- IfExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: CastExpr (Target='int')
- \- Value: CastExpr (Target='ptr')
- \- Value: NameExpr: '__fex_addtl_callback_exit'
- \- RHS: CastExpr (Target='int')
- \- Value: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: '__fex_addtl_callback_exit'
- \- Arguments: (Len=1)
- \0- NameExpr: 'name'
- |5- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: '_StackNode new_last'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: '__stack_tail'
- \- Field: _prev
- |6- CallExpr:
- |- Method: NameExpr: 'mem$$free_unmanaged'
- \- Arguments: (Len=1)
- \0- NameExpr: '__stack_tail'
- |7- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__stack_tail'
- \- RHS: NameExpr: 'new_last'
- |8- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new_last'
- \- Field: _next
- \- RHS: CastExpr (Target='_StackNode')
- \- Value: LiteralExpr: type=ptr, value=0
- |9- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__in_err'
- \- RHS: LiteralExpr: type=bool, value=0
- \10- ReturnExpr: <void>
- |20- SepExpr (Consumed=2)
- |21- FunctionDecl:
- |- Head: FunctionDeclHead: Name='orth::internal::hooks::setup_pstack' Type='void' Nargs=0
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: '_StackNode new'
- \- RHS: CastExpr (Target='_StackNode')
- \- Value: CallExpr:
- |- Method: NameExpr: 'mem$$alloc_unmanaged'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(_StackNode)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: _next
- \- RHS: CastExpr (Target='_StackNode')
- \- Value: LiteralExpr: type=ptr, value=0
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: _prev
- \- RHS: CastExpr (Target='_StackNode')
- \- Value: LiteralExpr: type=ptr, value=0
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=<dummy root>
- |4- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__stack'
- \- RHS: NameExpr: 'new'
- |5- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__stack_tail'
- \- RHS: NameExpr: 'new'
- \6- ReturnExpr: <void>
- |22- SepExpr (Consumed=2)
- |23- IntrinsicExpr: '@register_startup("orth::internal::hooks::setup_pstack", 0)@'
- |24- SepExpr (Consumed=2)
- |25- FunctionDecl:
- |- Head: FunctionDeclHead: Name='orth::fail' Type='void' Nargs=1
- \0- cstr err
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\x1B[41m==================== orth::fail bailout report ====================\x1B[0m\n
- |1- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=Bailout message: '%s'\n
- \1- NameExpr: 'err'
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: CastExpr (Target='ptr')
- \- Value: NameExpr: '__stack'
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Cannot print traceback, __stack is null. Did you compile with the 'funchooks' flag?\n
- |1- CallExpr:
- |- Method: NameExpr: 'exit'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- |3- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Traceback (orth calls only, most recent call last):\n
- |4- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: '_StackNode curr'
- \- RHS: NameExpr: '__stack'
- |5- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int curr_idx'
- \- RHS: LiteralExpr: type=int, value=0
- |6- WhileExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: CastExpr (Target='ptr')
- \- Value: NameExpr: 'curr'
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=3)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value= %04i: %s\n
- |1- NameExpr: 'curr_idx'
- \2- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: name
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'curr_idx'
- \- RHS: LiteralExpr: type=int, value=1
- |2- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'curr'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: _next
- |7- CallExpr:
- |- Method: NameExpr: 'mem$$clean_up'
- \- Arguments: (Len=0)
- |8- CallExpr:
- |- Method: NameExpr: 'exit'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \9- ReturnExpr: <void>
- |26- SepExpr (Consumed=2)
- |27- FunctionDecl:
- |- Head: FunctionDeclHead: Name='__orth_sig_h' Type='void' Nargs=1
- \0- int code
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'code'
- \- RHS: LiteralExpr: type=int, value=11
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'orth$$fail'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Segmentation Fault Caught
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'code'
- \- RHS: LiteralExpr: type=int, value=6
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'orth$$fail'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Abort (malloc) Fault Caught
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'orth$$fail'
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: LiteralExpr: type=cstr, value=??? Fault Caught -
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'code'
- \- Field: str
- \- Arguments: (Len=0)
- \1- ReturnExpr: <void>
- |28- SepExpr (Consumed=2)
- |29- FileNode: (N_Statements=7)
- |0- SepExpr (Consumed=1)
- |1- IntrinsicExpr: '@declare_c_func("signal", "ptr", "(...)")@'
- |2- SepExpr (Consumed=2)
- |3- TypeDeclHead: `SignalHandler` (Is_Func_Alias=1, Is_Type_Alias:0, Is_Packed=0) Aliases Function->`void`
- |4- SepExpr (Consumed=2)
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='system::set_interrupt_handler' Type='void' Nargs=2
- |0- int id
- \1- SignalHandler h
- |0- CallExpr:
- |- Method: NameExpr: 'signal'
- \- Arguments: (Len=2)
- |0- NameExpr: 'id'
- \1- NameExpr: 'h'
- \1- ReturnExpr: <void>
- |6- SepExpr (Consumed=1)
- |30- SepExpr (Consumed=1)
- |31- FunctionDecl:
- |- Head: FunctionDeclHead: Name='orth::install_sigsev_handler' Type='void' Nargs=0
- |0- CallExpr:
- |- Method: NameExpr: 'system$$set_interrupt_handler'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=int, value=11
- \1- CastExpr (Target='SignalHandler')
- \- Value: NameExpr: '__orth_sig_h'
- |1- CallExpr:
- |- Method: NameExpr: 'system$$set_interrupt_handler'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=int, value=6
- \1- CastExpr (Target='SignalHandler')
- \- Value: NameExpr: '__orth_sig_h'
- \2- ReturnExpr: <void>
- |32- SepExpr (Consumed=1)
- |12- SepExpr (Consumed=4)
- |13- TypeDecl:
- |- Head: TypeDeclHead: `File` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=0)
- \- Body: TypeDeclBody: (N_Statements=15)
- |0- DeclExpr: 'cstr path'
- |1- DeclExpr: 'cstr mode'
- |2- DeclExpr: 'bool writable'
- |3- DeclExpr: 'bool reached_eof'
- |4- DeclExpr: 'bool closed'
- |5- DeclExpr: 'ptr _file'
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='File::open' Type='File' Nargs=2
- |0- cstr path
- \1- cstr mode
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'File f'
- \- RHS: CastExpr (Target='File')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(File)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: writable
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'mode'
- \- Field: contains
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=w
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: _file
- \- RHS: CallExpr:
- |- Method: NameExpr: 'fopen'
- \- Arguments: (Len=2)
- |0- NameExpr: 'path'
- \1- NameExpr: 'mode'
- |3- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: CastExpr (Target='int')
- \- Value: CastExpr (Target='ptr')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: _file
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'orth'
- \- Field: fail
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=***FATAL fileio/File::open error, fopen->0***\n
- |4- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: mode
- \- RHS: NameExpr: 'mode'
- |5- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: path
- \- RHS: NameExpr: 'path'
- |6- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: reached_eof
- \- RHS: CastExpr (Target='bool')
- \- Value: LiteralExpr: type=int, value=0
- |7- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: closed
- \- RHS: CastExpr (Target='bool')
- \- Value: LiteralExpr: type=int, value=0
- \8- ReturnExpr: NameExpr: 'f'
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='File::exists' Type='bool' Nargs=1
- \0- cstr path
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'ptr file'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'fopen'
- \- Arguments: (Len=2)
- |0- NameExpr: 'path'
- \1- LiteralExpr: type=cstr, value=r
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'file'
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=bool, value=0
- |2- CallExpr:
- |- Method: NameExpr: 'fclose'
- \- Arguments: (Len=1)
- \0- NameExpr: 'file'
- \3- ReturnExpr: LiteralExpr: type=bool, value=1
- |8- FunctionDecl:
- |- Head: FunctionDeclHead: Name='File:ready' Type='bool' Nargs=1
- \0- File f
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: reached_eof
- \- RHS: CastExpr (Target='bool')
- \- Value: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CastExpr (Target='bool')
- \- Value: LiteralExpr: type=int, value=1
- \1- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: writable
- |9- FunctionDecl:
- |- Head: FunctionDeclHead: Name='File:readline' Type='cstr' Nargs=1
- \0- File f
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int BLOCK_SIZE'
- \- RHS: LiteralExpr: type=int, value=63
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'cstr buf'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- NameExpr: 'BLOCK_SIZE'
- |2- AssignmentExpr (Operator='=')
- |- LHS: IndexExpr
- |- Array: NameExpr: 'buf'
- \- Value: LiteralExpr: type=int, value=0
- \- RHS: IndexExpr
- |- Array: GroupingExpr: LiteralExpr: type=cstr, value=\0
- \- Value: LiteralExpr: type=int, value=0
- |3- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int buf_sz'
- \- RHS: NameExpr: 'BLOCK_SIZE'
- |4- DeclExpr: 'cstr new_buf'
- |5- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int last_size'
- \- RHS: UnOpExpr (Operator='-')
- \- Value: LiteralExpr: type=int, value=1
- |6- DeclExpr: 'cstr ra_buf'
- |7- WhileExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'buf'
- \- Field: len
- \- Arguments: (Len=0)
- \- RHS: NameExpr: 'last_size'
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'last_size'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'buf'
- \- Field: len
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: NameExpr: 'fgets'
- \- Arguments: (Len=3)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'buf'
- \- Field: offset
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'buf'
- \- Field: len
- \- Arguments: (Len=0)
- |1- NameExpr: 'BLOCK_SIZE'
- \2- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: _file
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'buf'
- \- Field: len
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: reached_eof
- \- RHS: LiteralExpr: type=bool, value=1
- |1- ReturnExpr: NameExpr: 'buf'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: IndexExpr
- |- Array: NameExpr: 'buf'
- \- Value: BinOpExpr (Operator='-')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'buf'
- \- Field: len
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=1
- \- RHS: CastExpr (Target='byte')
- \- Value: CallExpr:
- |- Method: NameExpr: 'ord'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\n
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: NameExpr: 'buf'
- \-- Runoff Clause: BlockBody: (N_Statements=6)
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'buf_sz'
- \- RHS: NameExpr: 'BLOCK_SIZE'
- |1- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'ra_buf'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- NameExpr: 'buf_sz'
- |2- CallExpr:
- |- Method: NameExpr: 'memcpy'
- \- Arguments: (Len=3)
- |0- NameExpr: 'ra_buf'
- |1- NameExpr: 'buf'
- \2- BinOpExpr (Operator='-')
- |- LHS: NameExpr: 'buf_sz'
- \- RHS: NameExpr: 'BLOCK_SIZE'
- |3- CallExpr:
- |- Method: NameExpr: 'free'
- \- Arguments: (Len=1)
- \0- NameExpr: 'buf'
- |4- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'buf'
- \- RHS: NameExpr: 'ra_buf'
- |5- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: CastExpr (Target='int')
- \- Value: CastExpr (Target='ptr')
- \- Value: NameExpr: 'buf'
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=***FATAL fileio/File::readline error, realloc->0 for req_sz=%i***\n
- \1- NameExpr: 'buf_sz'
- |1- CallExpr:
- |- Method: NameExpr: 'exit'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- |8- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: reached_eof
- \- RHS: CastExpr (Target='bool')
- \- Value: LiteralExpr: type=int, value=1
- \9- ReturnExpr: NameExpr: 'buf'
- |10- FunctionDecl:
- |- Head: FunctionDeclHead: Name='File:readall' Type='cstr' Nargs=1
- \0- File f
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'cstr contents'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'f'
- \- Field: readline
- \- Arguments: (Len=0)
- |1- DeclExpr: 'cstr new_contents'
- |2- WhileExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'f'
- \- Field: ready
- \- Arguments: (Len=0)
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'new_contents'
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'contents'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'f'
- \- Field: readline
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'contents'
- \- Field: free
- \- Arguments: (Len=0)
- |2- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'contents'
- \- RHS: NameExpr: 'new_contents'
- \3- ReturnExpr: NameExpr: 'contents'
- |11- FunctionDecl:
- |- Head: FunctionDeclHead: Name='File:write' Type='void' Nargs=2
- |0- File f
- \1- cstr s
- |0- CallExpr:
- |- Method: NameExpr: 'fprintf'
- \- Arguments: (Len=3)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: _file
- |1- LiteralExpr: type=cstr, value=%s
- \2- NameExpr: 's'
- \1- ReturnExpr: <void>
- |12- FunctionDecl:
- |- Head: FunctionDeclHead: Name='File:writeln' Type='void' Nargs=2
- |0- File f
- \1- cstr s
- |0- CallExpr:
- |- Method: NameExpr: 'fprintf'
- \- Arguments: (Len=3)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: _file
- |1- LiteralExpr: type=cstr, value=%s\n
- \2- NameExpr: 's'
- \1- ReturnExpr: <void>
- |13- FunctionDecl:
- |- Head: FunctionDeclHead: Name='File:close' Type='void' Nargs=1
- \0- File f
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: writable
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'fflush'
- \- Arguments: (Len=1)
- \0- CastExpr (Target='ptr')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: _file
- |1- CallExpr:
- |- Method: NameExpr: 'fclose'
- \- Arguments: (Len=1)
- \0- CastExpr (Target='ptr')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: _file
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: closed
- \- RHS: CastExpr (Target='bool')
- \- Value: LiteralExpr: type=int, value=1
- \3- ReturnExpr: <void>
- \14- FunctionDecl:
- |- Head: FunctionDeclHead: Name='File:free' Type='void' Nargs=1
- \0- File f
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'f'
- \- Field: closed
- \- RHS: CastExpr (Target='bool')
- \- Value: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'f'
- \- Field: close
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: NameExpr: 'free'
- \- Arguments: (Len=1)
- \0- CastExpr (Target='ptr')
- \- Value: NameExpr: 'f'
- \2- ReturnExpr: <void>
- |14- SepExpr (Consumed=1)
- |2- FileNode: (N_Statements=7)
- |0- SepExpr (Consumed=1)
- |1- FileNode: (N_Statements=37)
- |0- SepExpr (Consumed=2)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `Box_cstr` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=1)
- \0- DeclExpr: 'cstr val'
- |2- SepExpr (Consumed=2)
- |3- TypeDecl:
- |- Head: TypeDeclHead: `Box_int` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=1)
- \0- DeclExpr: 'int val'
- |4- SepExpr (Consumed=2)
- |5- TypeDecl:
- |- Head: TypeDeclHead: `Box_short` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=1)
- \0- DeclExpr: 'short val'
- |6- SepExpr (Consumed=2)
- |7- TypeDecl:
- |- Head: TypeDeclHead: `Box_bool` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=1)
- \0- DeclExpr: 'bool val'
- |8- SepExpr (Consumed=2)
- |9- TypeDecl:
- |- Head: TypeDeclHead: `Box_long` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=1)
- \0- DeclExpr: 'long val'
- |10- SepExpr (Consumed=2)
- |11- TypeDecl:
- |- Head: TypeDeclHead: `Box_ptr` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=1)
- \0- DeclExpr: 'ptr val'
- |12- SepExpr (Consumed=2)
- |13- FunctionDecl:
- |- Head: FunctionDeclHead: Name='unbox::cstr' Type='cstr' Nargs=1
- \0- ptr p
- \0- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='Box_cstr')
- \- Value: NameExpr: 'p'
- \- Field: val
- |14- SepExpr (Consumed=2)
- |15- FunctionDecl:
- |- Head: FunctionDeclHead: Name='unbox::int' Type='int' Nargs=1
- \0- ptr p
- \0- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='Box_int')
- \- Value: NameExpr: 'p'
- \- Field: val
- |16- SepExpr (Consumed=2)
- |17- FunctionDecl:
- |- Head: FunctionDeclHead: Name='unbox::short' Type='short' Nargs=1
- \0- ptr p
- \0- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='Box_short')
- \- Value: NameExpr: 'p'
- \- Field: val
- |18- SepExpr (Consumed=2)
- |19- FunctionDecl:
- |- Head: FunctionDeclHead: Name='unbox::bool' Type='bool' Nargs=1
- \0- ptr p
- \0- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='Box_bool')
- \- Value: NameExpr: 'p'
- \- Field: val
- |20- SepExpr (Consumed=2)
- |21- FunctionDecl:
- |- Head: FunctionDeclHead: Name='unbox::long' Type='long' Nargs=1
- \0- ptr p
- \0- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='Box_long')
- \- Value: NameExpr: 'p'
- \- Field: val
- |22- SepExpr (Consumed=2)
- |23- FunctionDecl:
- |- Head: FunctionDeclHead: Name='unbox::ptr' Type='ptr' Nargs=1
- \0- ptr p
- \0- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='Box_ptr')
- \- Value: NameExpr: 'p'
- \- Field: val
- |24- SepExpr (Consumed=2)
- |25- FunctionDecl:
- |- Head: FunctionDeclHead: Name='unbox_l::cstr' Type='cstr' Nargs=1
- \0- long p
- \0- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='Box_cstr')
- \- Value: CastExpr (Target='ptr')
- \- Value: NameExpr: 'p'
- \- Field: val
- |26- SepExpr (Consumed=2)
- |27- FunctionDecl:
- |- Head: FunctionDeclHead: Name='unbox_l::int' Type='int' Nargs=1
- \0- long p
- \0- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='Box_int')
- \- Value: CastExpr (Target='ptr')
- \- Value: NameExpr: 'p'
- \- Field: val
- |28- SepExpr (Consumed=2)
- |29- FunctionDecl:
- |- Head: FunctionDeclHead: Name='unbox_l::short' Type='short' Nargs=1
- \0- long p
- \0- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='Box_short')
- \- Value: CastExpr (Target='ptr')
- \- Value: NameExpr: 'p'
- \- Field: val
- |30- SepExpr (Consumed=2)
- |31- FunctionDecl:
- |- Head: FunctionDeclHead: Name='unbox_l::bool' Type='bool' Nargs=1
- \0- long p
- \0- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='Box_bool')
- \- Value: CastExpr (Target='ptr')
- \- Value: NameExpr: 'p'
- \- Field: val
- |32- SepExpr (Consumed=2)
- |33- FunctionDecl:
- |- Head: FunctionDeclHead: Name='unbox_l::long' Type='long' Nargs=1
- \0- long p
- \0- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='Box_long')
- \- Value: CastExpr (Target='ptr')
- \- Value: NameExpr: 'p'
- \- Field: val
- |34- SepExpr (Consumed=2)
- |35- FunctionDecl:
- |- Head: FunctionDeclHead: Name='unbox_l::ptr' Type='ptr' Nargs=1
- \0- long p
- \0- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='Box_ptr')
- \- Value: CastExpr (Target='ptr')
- \- Value: NameExpr: 'p'
- \- Field: val
- |36- SepExpr (Consumed=1)
- |2- SepExpr (Consumed=2)
- |3- TypeDecl:
- |- Head: TypeDeclHead: `_ArgList_CStrBox` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=1)
- \0- DeclExpr: 'cstr str'
- |4- SepExpr (Consumed=2)
- |5- TypeDecl:
- |- Head: TypeDeclHead: `ArgList` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=1)
- \0- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ArgList:get' Type='cstr' Nargs=2
- |0- ArgList l
- \1- int pos
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'unbox_l'
- \- Field: cstr
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: CastExpr (Target='long')
- \- Value: CastExpr (Target='ptr')
- \- Value: NameExpr: 'l'
- \- RHS: CastExpr (Target='long')
- \- Value: GroupingExpr: BinOpExpr (Operator='*')
- |- LHS: NameExpr: 'pos'
- \- RHS: IntrinsicExpr: '@sizeof(ptr)@'
- |6- SepExpr (Consumed=2)
- |3- FileNode: (N_Statements=13)
- |0- SepExpr (Consumed=1)
- |1- IntrinsicExpr: '@declare_c_func("fdopen", "ptr", "(i32, i8*)")@'
- |2- SepExpr (Consumed=1)
- |3- IntrinsicExpr: '@declare_c_func("fflush", "void", "(i8*)")@'
- |4- SepExpr (Consumed=2)
- |5- DeclExpr: 'ptr stdout'
- |6- SepExpr (Consumed=1)
- |7- DeclExpr: 'ptr stderr'
- |8- SepExpr (Consumed=1)
- |9- DeclExpr: 'ptr stdin'
- |10- SepExpr (Consumed=2)
- |11- FunctionDecl:
- |- Head: FunctionDeclHead: Name='stdio::init' Type='void' Nargs=0
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'stdout'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'fdopen'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=int, value=1
- \1- LiteralExpr: type=cstr, value=w
- |1- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'stderr'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'fdopen'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=int, value=2
- \1- LiteralExpr: type=cstr, value=w
- |2- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'stdin'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'fdopen'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=int, value=0
- \1- LiteralExpr: type=cstr, value=r
- \3- ReturnExpr: <void>
- |12- SepExpr (Consumed=1)
- |4- SepExpr (Consumed=1)
- |5- FileNode: (N_Statements=12)
- |0- SepExpr (Consumed=2)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `_ProfileEntry` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=0)
- \- Body: TypeDeclBody: (N_Statements=8)
- |0- DeclExpr: '_ProfileEntry _next'
- |1- DeclExpr: 'cstr fname'
- |2- DeclExpr: 'long total_time'
- |3- DeclExpr: 'long exclusive_time'
- |4- DeclExpr: 'long exc_entry_time'
- |5- DeclExpr: 'long tot_entry_time'
- |6- DeclExpr: 'int stack_count'
- \7- DeclExpr: 'int entrance_count'
- |2- DeclExpr: '_ProfileEntry __profiler_entry_chain_head'
- |3- DeclExpr: '_ProfileEntry __profiler_entry_chain_tail'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='orth::internal::hooks::make_profile_entry' Type='_ProfileEntry' Nargs=1
- \0- cstr name
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: '_ProfileEntry entry'
- \- RHS: CastExpr (Target='_ProfileEntry')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(_ProfileEntry)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'entry'
- \- Field: fname
- \- RHS: NameExpr: 'name'
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'entry'
- \- Field: total_time
- \- RHS: CastExpr (Target='long')
- \- Value: LiteralExpr: type=int, value=0
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'entry'
- \- Field: exclusive_time
- \- RHS: CastExpr (Target='long')
- \- Value: LiteralExpr: type=int, value=0
- |4- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'entry'
- \- Field: exc_entry_time
- \- RHS: CastExpr (Target='long')
- \- Value: LiteralExpr: type=int, value=0
- |5- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'entry'
- \- Field: tot_entry_time
- \- RHS: CastExpr (Target='long')
- \- Value: LiteralExpr: type=int, value=0
- |6- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'entry'
- \- Field: stack_count
- \- RHS: LiteralExpr: type=int, value=0
- |7- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'entry'
- \- Field: entrance_count
- \- RHS: LiteralExpr: type=int, value=0
- |8- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'entry'
- \- Field: _next
- \- RHS: CastExpr (Target='_ProfileEntry')
- \- Value: LiteralExpr: type=ptr, value=0
- \9- ReturnExpr: NameExpr: 'entry'
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='orth::internal::hooks::get_profile_entry' Type='_ProfileEntry' Nargs=1
- \0- cstr name
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: '_ProfileEntry curr'
- \- RHS: NameExpr: '__profiler_entry_chain_head'
- |1- WhileExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: CastExpr (Target='int')
- \- Value: CastExpr (Target='ptr')
- \- Value: NameExpr: 'curr'
- \- RHS: CastExpr (Target='int')
- \- Value: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: fname
- \- RHS: NameExpr: 'name'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: NameExpr: 'curr'
- |1- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'curr'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: _next
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: '__profiler_entry_chain_tail'
- \- Field: _next
- \- RHS: CallExpr:
- |- Method: NameExpr: 'orth$$internal$$hooks$$make_profile_entry'
- \- Arguments: (Len=1)
- \0- NameExpr: 'name'
- |3- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__profiler_entry_chain_tail'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: '__profiler_entry_chain_tail'
- \- Field: _next
- \4- ReturnExpr: NameExpr: '__profiler_entry_chain_tail'
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='orth::internal::hooks::profile_enter' Type='void' Nargs=1
- \0- cstr name
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: CastExpr (Target='int')
- \- Value: CastExpr (Target='ptr')
- \- Value: NameExpr: '__profiler_entry_chain_tail'
- \- RHS: CastExpr (Target='int')
- \- Value: CastExpr (Target='ptr')
- \- Value: NameExpr: '__profiler_entry_chain_head'
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: '_ProfileEntry last'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'orth$$internal$$hooks$$get_profile_entry'
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: '__stack_tail'
- \- Field: name
- |1- AssignmentExpr (Operator='+=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'last'
- \- Field: exclusive_time
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: CallExpr:
- |- Method: NameExpr: 'clock'
- \- Arguments: (Len=0)
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'last'
- \- Field: exc_entry_time
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: '_ProfileEntry this'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'orth$$internal$$hooks$$get_profile_entry'
- \- Arguments: (Len=1)
- \0- NameExpr: 'name'
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'this'
- \- Field: stack_count
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'this'
- \- Field: tot_entry_time
- \- RHS: CallExpr:
- |- Method: NameExpr: 'clock'
- \- Arguments: (Len=0)
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'this'
- \- Field: exc_entry_time
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'this'
- \- Field: tot_entry_time
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'this'
- \- Field: exc_entry_time
- \- RHS: CallExpr:
- |- Method: NameExpr: 'clock'
- \- Arguments: (Len=0)
- |3- AssignmentExpr (Operator='+=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'this'
- \- Field: stack_count
- \- RHS: LiteralExpr: type=int, value=1
- |4- AssignmentExpr (Operator='+=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'this'
- \- Field: entrance_count
- \- RHS: LiteralExpr: type=int, value=1
- \5- ReturnExpr: <void>
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='orth::internal::hooks::profile_exit' Type='void' Nargs=1
- \0- cstr name
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: '_ProfileEntry this'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'orth$$internal$$hooks$$get_profile_entry'
- \- Arguments: (Len=1)
- \0- NameExpr: 'name'
- |1- AssignmentExpr (Operator='+=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'this'
- \- Field: exclusive_time
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: CallExpr:
- |- Method: NameExpr: 'clock'
- \- Arguments: (Len=0)
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'this'
- \- Field: exc_entry_time
- |2- AssignmentExpr (Operator='-=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'this'
- \- Field: stack_count
- \- RHS: LiteralExpr: type=int, value=1
- |3- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'this'
- \- Field: stack_count
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='+=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'this'
- \- Field: total_time
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: CallExpr:
- |- Method: NameExpr: 'clock'
- \- Arguments: (Len=0)
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'this'
- \- Field: tot_entry_time
- |4- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: NameExpr: 'orth$$internal$$hooks$$get_profile_entry'
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: '__stack_tail'
- \- Field: _prev
- \- Field: name
- \- Field: exc_entry_time
- \- RHS: CallExpr:
- |- Method: NameExpr: 'clock'
- \- Arguments: (Len=0)
- \5- ReturnExpr: <void>
- |8- FunctionDecl:
- |- Head: FunctionDeclHead: Name='orth::internal::profile::display_profiling_data' Type='void' Nargs=0
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__in_err'
- \- RHS: LiteralExpr: type=bool, value=1
- |1- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Profiling Data:\n
- |2- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: '_ProfileEntry curr'
- \- RHS: NameExpr: '__profiler_entry_chain_head'
- |3- WhileExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: CastExpr (Target='ptr')
- \- Value: NameExpr: 'curr'
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: fname
- \- RHS: LiteralExpr: type=cstr, value=<dummy>
- \- RHS: BinOpExpr (Operator='&')
- |- LHS: BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: fname
- \- RHS: LiteralExpr: type=cstr, value=main
- \- RHS: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: fname
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=orth$$internal$$
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=5)
- |0- LiteralExpr: type=cstr, value= tot:%10lu exc:%10lu ent:%5lu - %s\n
- |1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: total_time
- |2- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: exclusive_time
- |3- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: entrance_count
- \4- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: fname
- |1- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'curr'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: _next
- |4- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__in_err'
- \- RHS: LiteralExpr: type=bool, value=0
- \5- ReturnExpr: <void>
- |9- SepExpr (Consumed=2)
- |10- FunctionDecl:
- |- Head: FunctionDeclHead: Name='orth::internal::profile::dump_profiling_data_csv' Type='void' Nargs=1
- \0- cstr filename
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__in_err'
- \- RHS: LiteralExpr: type=bool, value=1
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'File out'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'File$$open'
- \- Arguments: (Len=2)
- |0- NameExpr: 'filename'
- \1- LiteralExpr: type=cstr, value=w
- |2- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: '_ProfileEntry curr'
- \- RHS: NameExpr: '__profiler_entry_chain_head'
- |3- CallExpr:
- |- Method: NameExpr: 'fprintf'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'out'
- \- Field: _file
- \1- LiteralExpr: type=cstr, value=Total Time,Exclusive Time,Entry Count,Symbol Name\n
- |4- WhileExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: CastExpr (Target='ptr')
- \- Value: NameExpr: 'curr'
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: fname
- \- RHS: LiteralExpr: type=cstr, value=<dummy>
- \- RHS: BinOpExpr (Operator='&')
- |- LHS: BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: fname
- \- RHS: LiteralExpr: type=cstr, value=main
- \- RHS: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: fname
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=orth$$internal$$
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'fprintf'
- \- Arguments: (Len=6)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'out'
- \- Field: _file
- |1- LiteralExpr: type=cstr, value=%10lu,%10lu,%5lu,%s\n
- |2- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: total_time
- |3- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: exclusive_time
- |4- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: entrance_count
- \5- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: fname
- |1- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'curr'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'curr'
- \- Field: _next
- |5- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'out'
- \- Field: close
- \- Arguments: (Len=0)
- |6- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=Data written to '%s'\n
- \1- NameExpr: 'filename'
- |7- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__in_err'
- \- RHS: LiteralExpr: type=bool, value=0
- \8- ReturnExpr: <void>
- |11- FunctionDecl:
- |- Head: FunctionDeclHead: Name='orth::internal::profile::install_profiler' Type='void' Nargs=0
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__fex_addtl_callback_enter'
- \- RHS: CastExpr (Target='AddtlEnterExitCallback')
- \- Value: NameExpr: 'orth$$internal$$hooks$$profile_enter'
- |1- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__fex_addtl_callback_exit'
- \- RHS: CastExpr (Target='AddtlEnterExitCallback')
- \- Value: NameExpr: 'orth$$internal$$hooks$$profile_exit'
- |2- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__profiler_entry_chain_head'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'orth$$internal$$hooks$$make_profile_entry'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=<dummy>
- |3- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: '__profiler_entry_chain_tail'
- \- RHS: NameExpr: '__profiler_entry_chain_head'
- \4- ReturnExpr: <void>
- |6- SepExpr (Consumed=1)
- |7- FileNode: (N_Statements=5)
- |0- IntrinsicExpr: '@declare_c_func("get_current_dir_name", "cstr", "()")@'
- |1- IntrinsicExpr: '@declare_c_func("getenv", "cstr", "(i8*)")@'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='os::get_cwd' Type='cstr' Nargs=0
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'cstr raw_cwd'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'get_current_dir_name'
- \- Arguments: (Len=0)
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'cstr ret'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'raw_cwd'
- \- Field: copy
- \- Arguments: (Len=0)
- |2- CallExpr:
- |- Method: NameExpr: 'mem$$raw_free'
- \- Arguments: (Len=1)
- \0- NameExpr: 'raw_cwd'
- \3- ReturnExpr: NameExpr: 'ret'
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='os::env::get' Type='cstr' Nargs=1
- \0- cstr key
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: NameExpr: 'os$$env$$has'
- \- Arguments: (Len=1)
- \0- NameExpr: 'key'
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'orth$$fail'
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: LiteralExpr: type=cstr, value=os::env::get called on nonexistant key :
- \- RHS: NameExpr: 'key'
- \1- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'getenv'
- \- Arguments: (Len=1)
- \0- NameExpr: 'key'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='os::env::has' Type='bool' Nargs=1
- \0- cstr key
- \0- ReturnExpr: BinOpExpr (Operator='!=')
- |- LHS: CastExpr (Target='ptr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'getenv'
- \- Arguments: (Len=1)
- \0- NameExpr: 'key'
- \- RHS: LiteralExpr: type=ptr, value=0
- |8- FileNode: (N_Statements=41)
- |0- SepExpr (Consumed=1)
- |1- FileNode: (N_Statements=47)
- |0- SepExpr (Consumed=1)
- |1- FileNode: (N_Statements=8)
- |0- SepExpr (Consumed=1)
- |1- SepExpr (Consumed=2)
- |2- TypeDecl:
- |- Head: TypeDeclHead: `LinkedListNode` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=0)
- \- Body: TypeDeclBody: (N_Statements=4)
- |0- DeclExpr: 'ptr value'
- |1- DeclExpr: 'LinkedListNode next'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='LinkedListNode::new' Type='LinkedListNode' Nargs=1
- \0- ptr value
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'LinkedListNode new'
- \- RHS: CastExpr (Target='LinkedListNode')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(LinkedListNode)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value
- \- RHS: NameExpr: 'value'
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: next
- \- RHS: CastExpr (Target='LinkedListNode')
- \- Value: LiteralExpr: type=ptr, value=0
- \3- ReturnExpr: NameExpr: 'new'
- \3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='LinkedListNode:free' Type='void' Nargs=1
- \0- LinkedListNode n
- |0- CallExpr:
- |- Method: NameExpr: 'free'
- \- Arguments: (Len=1)
- \0- NameExpr: 'n'
- \1- ReturnExpr: <void>
- |3- SepExpr (Consumed=2)
- |4- TypeDecl:
- |- Head: TypeDeclHead: `ListCacheBox` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=1)
- \0- DeclExpr: 'LinkedListNode node'
- |5- SepExpr (Consumed=2)
- |6- TypeDecl:
- |- Head: TypeDeclHead: `List` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=0)
- \- Body: TypeDeclBody: (N_Statements=16)
- |0- DeclExpr: 'int len'
- |1- DeclExpr: 'LinkedListNode head'
- |2- DeclExpr: 'ptr cache'
- |3- DeclExpr: 'bool cache_ready'
- |4- DeclExpr: 'bool cache_alloced'
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='List::new' Type='List' Nargs=0
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'List new'
- \- RHS: CastExpr (Target='List')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(List)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=0
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: cache_ready
- \- RHS: LiteralExpr: type=bool, value=0
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: cache_alloced
- \- RHS: LiteralExpr: type=bool, value=0
- |4- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: head
- \- RHS: CastExpr (Target='LinkedListNode')
- \- Value: LiteralExpr: type=ptr, value=0
- \5- ReturnExpr: NameExpr: 'new'
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='List::copy' Type='List' Nargs=1
- \0- List o
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'List new'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'o'
- \- Field: len
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'new'
- \- Field: append
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'o'
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: NameExpr: 'new'
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='List:gen_cache' Type='void' Nargs=1
- \0- List l
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: cache_alloced
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'free'
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: cache
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int SOB'
- \- RHS: GroupingExpr: IntrinsicExpr: '@sizeof(ListCacheBox)@'
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: cache_alloced
- \- RHS: LiteralExpr: type=bool, value=1
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: cache_ready
- \- RHS: LiteralExpr: type=bool, value=1
- |4- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: cache
- \- RHS: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='*')
- |- LHS: NameExpr: 'SOB'
- \- RHS: GroupingExpr: BinOpExpr (Operator='+')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |5- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int idx'
- \- RHS: LiteralExpr: type=int, value=0
- |6- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'LinkedListNode current'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: head
- |7- DeclExpr: 'ListCacheBox box'
- |8- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'idx'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- |- Body: BlockBody: (N_Statements=4)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'box'
- \- RHS: CastExpr (Target='ListCacheBox')
- \- Value: CastExpr (Target='ptr')
- \- Value: GroupingExpr: BinOpExpr (Operator='+')
- |- LHS: CastExpr (Target='long')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: cache
- \- RHS: CastExpr (Target='long')
- \- Value: GroupingExpr: BinOpExpr (Operator='*')
- |- LHS: NameExpr: 'SOB'
- \- RHS: NameExpr: 'idx'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'box'
- \- Field: node
- \- RHS: NameExpr: 'current'
- |2- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'idx'
- \- RHS: LiteralExpr: type=int, value=1
- |3- IfExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: CastExpr (Target='ptr')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'current'
- \- Field: next
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'current'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'current'
- \- Field: next
- \9- ReturnExpr: <void>
- |8- FunctionDecl:
- |- Head: FunctionDeclHead: Name='List:get_node' Type='LinkedListNode' Nargs=2
- |0- List l
- \1- int want
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: cache_ready
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: gen_cache
- \- Arguments: (Len=0)
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='>=')
- |- LHS: NameExpr: 'want'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'orth'
- \- Field: fail
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: LiteralExpr: type=cstr, value=Requested List pos > than exists,
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'want'
- \- Field: str
- \- Arguments: (Len=0)
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: LiteralExpr: type=cstr, value=>
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- \- Field: str
- \- Arguments: (Len=0)
- \2- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='ListCacheBox')
- \- Value: CastExpr (Target='ptr')
- \- Value: GroupingExpr: BinOpExpr (Operator='+')
- |- LHS: CastExpr (Target='long')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: cache
- \- RHS: CastExpr (Target='long')
- \- Value: GroupingExpr: BinOpExpr (Operator='*')
- |- LHS: GroupingExpr: IntrinsicExpr: '@sizeof(ListCacheBox)@'
- \- RHS: NameExpr: 'want'
- \- Field: node
- |9- FunctionDecl:
- |- Head: FunctionDeclHead: Name='List:get' Type='ptr' Nargs=2
- |0- List l
- \1- int want
- \0- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: get_node
- \- Arguments: (Len=1)
- \0- NameExpr: 'want'
- \- Field: value
- |10- FunctionDecl:
- |- Head: FunctionDeclHead: Name='List:append' Type='void' Nargs=2
- |0- List l
- \1- ptr item
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'LinkedListNode new'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'LinkedListNode'
- \- Field: new
- \- Arguments: (Len=1)
- \0- NameExpr: 'item'
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='>')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'LinkedListNode last'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: get_node
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'last'
- \- Field: next
- \- RHS: NameExpr: 'new'
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: head
- \- RHS: NameExpr: 'new'
- |2- AssignmentExpr (Operator='+=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: cache_ready
- \- RHS: LiteralExpr: type=bool, value=0
- \4- ReturnExpr: <void>
- |11- FunctionDecl:
- |- Head: FunctionDeclHead: Name='List:set' Type='void' Nargs=3
- |0- List l
- |1- int i
- \2- ptr item
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: get_node
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: value
- \- RHS: NameExpr: 'item'
- \1- ReturnExpr: <void>
- |12- FunctionDecl:
- |- Head: FunctionDeclHead: Name='List:insert' Type='void' Nargs=3
- |0- List l
- |1- int i
- \2- ptr item
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- |- Body: BlockBody: (N_Statements=3)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append
- \- Arguments: (Len=1)
- \0- NameExpr: 'item'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: cache_ready
- \- RHS: LiteralExpr: type=bool, value=0
- |2- ReturnExpr: <void>
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='>')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Can't insert past end of list!\n
- |1- ReturnExpr: <void>
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'LinkedListNode new'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'LinkedListNode'
- \- Field: new
- \- Arguments: (Len=1)
- \0- NameExpr: 'item'
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=5)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: next
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: head
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: head
- \- RHS: NameExpr: 'new'
- |2- AssignmentExpr (Operator='+=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: cache_ready
- \- RHS: LiteralExpr: type=bool, value=0
- |4- ReturnExpr: <void>
- |3- AssignmentExpr (Operator='+=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |4- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'LinkedListNode prev'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: get_node
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='-')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |5- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: next
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'prev'
- \- Field: next
- |6- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'prev'
- \- Field: next
- \- RHS: NameExpr: 'new'
- |7- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: cache_ready
- \- RHS: LiteralExpr: type=bool, value=0
- \8- ReturnExpr: <void>
- |13- FunctionDecl:
- |- Head: FunctionDeclHead: Name='List:del' Type='void' Nargs=2
- |0- List l
- \1- int i
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='>=')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=No such item\n
- |1- ReturnExpr: <void>
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=6)
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'LinkedListNode old_head'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: head
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='>')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: head
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: head
- \- Field: next
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'old_head'
- \- Field: free
- \- Arguments: (Len=0)
- |3- AssignmentExpr (Operator='-=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |4- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: cache_ready
- \- RHS: LiteralExpr: type=bool, value=0
- |5- ReturnExpr: <void>
- |2- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'LinkedListNode prev'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: get_node
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='-')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |3- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'prev'
- \- Field: next
- \- Field: free
- \- Arguments: (Len=0)
- |4- IfExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: NameExpr: 'i'
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'prev'
- \- Field: next
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'prev'
- \- Field: next
- \- Field: next
- |5- AssignmentExpr (Operator='-=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |6- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: cache_ready
- \- RHS: LiteralExpr: type=bool, value=0
- \7- ReturnExpr: <void>
- |14- FunctionDecl:
- |- Head: FunctionDeclHead: Name='List:clear' Type='void' Nargs=1
- \0- List l
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int idx'
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |1- WhileExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: NameExpr: 'idx'
- \- RHS: UnOpExpr (Operator='-')
- \- Value: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: get_node
- \- Arguments: (Len=1)
- \0- NameExpr: 'idx'
- \- Field: free
- \- Arguments: (Len=0)
- |1- AssignmentExpr (Operator='-=')
- |- LHS: NameExpr: 'idx'
- \- RHS: LiteralExpr: type=int, value=1
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=0
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: cache_ready
- \- RHS: LiteralExpr: type=bool, value=0
- \4- ReturnExpr: <void>
- \15- FunctionDecl:
- |- Head: FunctionDeclHead: Name='List:free' Type='void' Nargs=1
- \0- List l
- |0- CallExpr:
- |- Method: NameExpr: 'free'
- \- Arguments: (Len=1)
- \0- NameExpr: 'l'
- \1- ReturnExpr: <void>
- |7- SepExpr (Consumed=2)
- |2- SepExpr (Consumed=2)
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='lex::get_alphabet' Type='cstr' Nargs=0
- \0- ReturnExpr: LiteralExpr: type=cstr, value=qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM_
- |4- SepExpr (Consumed=2)
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='lex::get_ext_identifier' Type='cstr' Nargs=0
- \0- ReturnExpr: LiteralExpr: type=cstr, value=qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM_1234567890
- |6- SepExpr (Consumed=2)
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='lex::match_identifier' Type='int' Nargs=1
- \0- cstr text
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: LiteralExpr: type=int, value=0
- \- Field: in
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'lex$$get_alphabet'
- \- Arguments: (Len=0)
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=1
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: NameExpr: 'i'
- \- Field: in
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'lex$$get_ext_identifier'
- \- Arguments: (Len=0)
- \- RHS: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: len
- \- Arguments: (Len=0)
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: NameExpr: 'i'
- |8- SepExpr (Consumed=2)
- |9- FunctionDecl:
- |- Head: FunctionDeclHead: Name='lex::match_function_identifier' Type='int' Nargs=1
- \0- cstr text
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: LiteralExpr: type=int, value=0
- \- Field: in
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'lex$$get_alphabet'
- \- Arguments: (Len=0)
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=1
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: BinOpExpr (Operator='+')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: NameExpr: 'i'
- \- Field: in
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'lex$$get_ext_identifier'
- \- Arguments: (Len=0)
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: NameExpr: 'i'
- \- Field: in
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=:
- \- RHS: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: len
- \- Arguments: (Len=0)
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: NameExpr: 'i'
- |10- SepExpr (Consumed=2)
- |11- FunctionDecl:
- |- Head: FunctionDeclHead: Name='lex::match_binop' Type='int' Nargs=1
- \0- cstr text
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='+')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value===
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=!=
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=>=
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=<=
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=>>
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=<<
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=2
- \1- ReturnExpr: CastExpr (Target='int')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: LiteralExpr: type=int, value=0
- \- Field: in
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=&*/-+%<>
- |12- SepExpr (Consumed=2)
- |13- FunctionDecl:
- |- Head: FunctionDeclHead: Name='lex::match_augassign' Type='int' Nargs=1
- \0- cstr text
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='+')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=+=
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=-=
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=*=
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=/=
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=2
- \1- ReturnExpr: LiteralExpr: type=int, value=0
- |14- SepExpr (Consumed=2)
- |15- FunctionDecl:
- |- Head: FunctionDeclHead: Name='lex::match_int_literal' Type='int' Nargs=1
- \0- cstr text
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: LiteralExpr: type=int, value=0
- \- Field: in
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=1234567890
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |2- WhileExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: NameExpr: 'i'
- \- Field: in
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=1234567890xbXB
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |3- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: NameExpr: 'i'
- \- Field: in
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=.
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \4- ReturnExpr: NameExpr: 'i'
- |16- SepExpr (Consumed=2)
- |17- FunctionDecl:
- |- Head: FunctionDeclHead: Name='lex::match_bool_literal' Type='int' Nargs=1
- \0- cstr text
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=true
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=4
- \-- Runoff Clause: IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=false
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=5
- \1- ReturnExpr: LiteralExpr: type=int, value=0
- |18- SepExpr (Consumed=2)
- |19- FunctionDecl:
- |- Head: FunctionDeclHead: Name='lex::match_float_literal' Type='int' Nargs=1
- \0- cstr text
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- WhileExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: NameExpr: 'i'
- \- Field: in
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=1234567890.
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \3- ReturnExpr: NameExpr: 'i'
- |20- SepExpr (Consumed=2)
- |21- FunctionDecl:
- |- Head: FunctionDeclHead: Name='lex::match_var_decl' Type='int' Nargs=1
- \0- cstr text
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'lex$$match_identifier'
- \- Arguments: (Len=1)
- \0- NameExpr: 'text'
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |2- WhileExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: NameExpr: 'i'
- \- Field: in
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value= \t
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |3- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int name'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'lex$$match_identifier'
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: offset
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- |4- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'name'
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |5- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: NameExpr: 'name'
- \6- ReturnExpr: NameExpr: 'i'
- |22- SepExpr (Consumed=2)
- |23- FunctionDecl:
- |- Head: FunctionDeclHead: Name='lex::match_string_literal' Type='int' Nargs=1
- \0- cstr text
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: BinOpExpr (Operator='==')
- |- LHS: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: LiteralExpr: type=int, value=0
- \- RHS: CastExpr (Target='byte')
- \- Value: LiteralExpr: type=int, value=34
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=1
- |2- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'bool escape'
- \- RHS: LiteralExpr: type=bool, value=0
- |3- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'bool continue'
- \- RHS: LiteralExpr: type=bool, value=1
- |4- WhileExpr:
- |- Condition: NameExpr: 'continue'
- |- Body: BlockBody: (N_Statements=3)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: BinOpExpr (Operator='==')
- |- LHS: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: NameExpr: 'i'
- \- RHS: CastExpr (Target='byte')
- \- Value: LiteralExpr: type=int, value=34
- \- RHS: UnOpExpr (Operator='-')
- \- Value: NameExpr: 'escape'
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'continue'
- \- RHS: LiteralExpr: type=bool, value=0
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: NameExpr: 'i'
- \- Field: in
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\\
- \- RHS: UnOpExpr (Operator='-')
- \- Value: NameExpr: 'escape'
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'escape'
- \- RHS: LiteralExpr: type=bool, value=1
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'escape'
- \- RHS: LiteralExpr: type=bool, value=0
- |2- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \5- ReturnExpr: NameExpr: 'i'
- |24- SepExpr (Consumed=2)
- |25- FunctionDecl:
- |- Head: FunctionDeclHead: Name='lex::match_line_comment' Type='int' Nargs=1
- \0- cstr text
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: LiteralExpr: type=int, value=0
- \- Field: in
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=#
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=1
- |2- WhileExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: NameExpr: 'i'
- \- Field: in
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\r\n
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: NameExpr: 'i'
- |26- SepExpr (Consumed=2)
- |27- FunctionDecl:
- |- Head: FunctionDeclHead: Name='lex::match_block_comment' Type='int' Nargs=1
- \0- cstr text
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=<#
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=1
- |2- WhileExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: offset
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=#>
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: NameExpr: 'i'
- |28- SepExpr (Consumed=2)
- |29- FunctionDecl:
- |- Head: FunctionDeclHead: Name='lex::match_import' Type='int' Nargs=1
- \0- cstr text
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=import
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: LiteralExpr: type=cstr, value=import
- \- Field: len
- \- Arguments: (Len=0)
- |2- WhileExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: NameExpr: 'i'
- \- Field: in
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value= \t
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |3- WhileExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: NameExpr: 'i'
- \- Field: in
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value= \r\n\t
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \4- ReturnExpr: NameExpr: 'i'
- |30- SepExpr (Consumed=2)
- |31- FunctionDecl:
- |- Head: FunctionDeclHead: Name='lex::match_intrinsic' Type='int' Nargs=1
- \0- cstr text
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: LiteralExpr: type=int, value=0
- \- Field: in
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=@
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=1
- |2- WhileExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: NameExpr: 'i'
- \- Field: in
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=@
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |3- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \4- ReturnExpr: NameExpr: 'i'
- |32- SepExpr (Consumed=2)
- |33- TypeDeclHead: `TokenMatcher` (Is_Func_Alias=1, Is_Type_Alias:0, Is_Packed=0) Aliases Function->`int`
- |34- SepExpr (Consumed=1)
- |35- TypeDecl:
- |- Head: TypeDeclHead: `TokenType` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=0)
- \- Body: TypeDeclBody: (N_Statements=18)
- |0- DeclExpr: 'cstr name'
- |1- DeclExpr: 'int simple_type'
- |2- DeclExpr: 'cstr simple_text'
- |3- DeclExpr: 'TokenMatcher func'
- |4- DeclExpr: 'List preceeded_opts'
- |5- DeclExpr: 'bool produce_token'
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TokenType::new_fn' Type='TokenType' Nargs=2
- |0- cstr name
- \1- TokenMatcher func
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'TokenType new'
- \- RHS: CastExpr (Target='TokenType')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(TokenType)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: name
- \- RHS: NameExpr: 'name'
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: simple_type
- \- RHS: LiteralExpr: type=int, value=0
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: func
- \- RHS: NameExpr: 'func'
- |4- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: preceeded_opts
- \- RHS: CastExpr (Target='List')
- \- Value: LiteralExpr: type=ptr, value=0
- |5- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: produce_token
- \- RHS: LiteralExpr: type=bool, value=1
- \6- ReturnExpr: NameExpr: 'new'
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TokenType::new_in' Type='TokenType' Nargs=2
- |0- cstr name
- \1- cstr text
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'TokenType new'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TokenType'
- \- Field: new_fn
- \- Arguments: (Len=2)
- |0- NameExpr: 'name'
- \1- CastExpr (Target='TokenMatcher')
- \- Value: LiteralExpr: type=ptr, value=0
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: simple_type
- \- RHS: LiteralExpr: type=int, value=1
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: simple_text
- \- RHS: NameExpr: 'text'
- \3- ReturnExpr: NameExpr: 'new'
- |8- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TokenType::new_eq' Type='TokenType' Nargs=2
- |0- cstr name
- \1- cstr text
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'TokenType new'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TokenType'
- \- Field: new_in
- \- Arguments: (Len=2)
- |0- NameExpr: 'name'
- \1- NameExpr: 'text'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: simple_type
- \- RHS: LiteralExpr: type=int, value=2
- \2- ReturnExpr: NameExpr: 'new'
- |9- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TokenType::new_kw' Type='TokenType' Nargs=2
- |0- cstr name
- \1- cstr text
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'TokenType new'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TokenType'
- \- Field: new_in
- \- Arguments: (Len=2)
- |0- NameExpr: 'name'
- \1- NameExpr: 'text'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: simple_type
- \- RHS: LiteralExpr: type=int, value=3
- \2- ReturnExpr: NameExpr: 'new'
- |10- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TokenType:match_internal' Type='int' Nargs=2
- |0- TokenType self
- \1- cstr text
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: simple_type
- \- RHS: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CastExpr (Target='int')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: LiteralExpr: type=int, value=0
- \- Field: in
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: simple_text
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: simple_type
- \- RHS: LiteralExpr: type=int, value=2
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: simple_text
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: simple_text
- \- Field: len
- \- Arguments: (Len=0)
- |1- ReturnExpr: LiteralExpr: type=int, value=0
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: simple_type
- \- RHS: LiteralExpr: type=int, value=3
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: simple_text
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: simple_text
- \- Field: len
- \- Arguments: (Len=0)
- \- Field: in
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value= \t\r\n
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: simple_text
- \- Field: len
- \- Arguments: (Len=0)
- |1- ReturnExpr: LiteralExpr: type=int, value=0
- |1- ReturnExpr: LiteralExpr: type=int, value=0
- \1- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: func
- \- Arguments: (Len=1)
- \0- NameExpr: 'text'
- |11- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TokenType:match' Type='int' Nargs=3
- |0- TokenType self
- |1- List token_context
- \2- cstr text
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int count'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: match_internal
- \- Arguments: (Len=1)
- \0- NameExpr: 'text'
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: CastExpr (Target='ptr')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: preceeded_opts
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'TokenType last_type'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='Token')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'token_context'
- \- Field: get
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'token_context'
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- \- Field: type_
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int opts_pos'
- \- RHS: LiteralExpr: type=int, value=0
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'opts_pos'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: preceeded_opts
- \- Field: len
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'last_type'
- \- Field: name
- \- RHS: CastExpr (Target='cstr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: preceeded_opts
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'opts_pos'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: NameExpr: 'count'
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'opts_pos'
- \- RHS: LiteralExpr: type=int, value=1
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- ReturnExpr: NameExpr: 'count'
- \2- ReturnExpr: LiteralExpr: type=int, value=0
- |12- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TokenType:after' Type='TokenType' Nargs=2
- |0- TokenType self
- \1- cstr prev_req
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: CastExpr (Target='ptr')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: preceeded_opts
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: preceeded_opts
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: preceeded_opts
- \- Field: append
- \- Arguments: (Len=1)
- \0- CastExpr (Target='ptr')
- \- Value: NameExpr: 'prev_req'
- \2- ReturnExpr: NameExpr: 'self'
- |13- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TokenType:or' Type='TokenType' Nargs=2
- |0- TokenType self
- \1- cstr prev_req
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: after
- \- Arguments: (Len=1)
- \0- NameExpr: 'prev_req'
- |14- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TokenType:free' Type='void' Nargs=1
- \0- TokenType self
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: CastExpr (Target='ptr')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: preceeded_opts
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: preceeded_opts
- \- Field: clear
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: preceeded_opts
- \- Field: free
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: NameExpr: 'free'
- \- Arguments: (Len=1)
- \0- CastExpr (Target='ptr')
- \- Value: NameExpr: 'self'
- \2- ReturnExpr: <void>
- |15- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TokenType:__eq__' Type='bool' Nargs=2
- |0- TokenType self
- \1- TokenType other
- \0- ReturnExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: name
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'other'
- \- Field: name
- |16- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TokenType:notoken' Type='TokenType' Nargs=1
- \0- TokenType self
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: produce_token
- \- RHS: LiteralExpr: type=bool, value=0
- \1- ReturnExpr: NameExpr: 'self'
- \17- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TokenType:make_token' Type='Token' Nargs=2
- |0- TokenType self
- \1- cstr text
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'Token'
- \- Field: _new
- \- Arguments: (Len=2)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: substr
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=int, value=0
- \1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: match_internal
- \- Arguments: (Len=1)
- \0- NameExpr: 'text'
- \1- NameExpr: 'self'
- |36- SepExpr (Consumed=2)
- |37- TypeDecl:
- |- Head: TypeDeclHead: `Token` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=0)
- \- Body: TypeDeclBody: (N_Statements=7)
- |0- DeclExpr: 'cstr text'
- |1- DeclExpr: 'TokenType type_'
- |2- DeclExpr: 'cstr origin_file'
- |3- DeclExpr: 'int origin_line'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Token::_new' Type='Token' Nargs=2
- |0- cstr text
- \1- TokenType type_
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'Token new'
- \- RHS: CastExpr (Target='Token')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(Token)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: text
- \- RHS: NameExpr: 'text'
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: type_
- \- RHS: NameExpr: 'type_'
- \3- ReturnExpr: NameExpr: 'new'
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Token:free' Type='void' Nargs=1
- \0- Token self
- |0- CallExpr:
- |- Method: NameExpr: 'free'
- \- Arguments: (Len=1)
- \0- CastExpr (Target='ptr')
- \- Value: NameExpr: 'self'
- \1- ReturnExpr: <void>
- \6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Token::free_token_list' Type='void' Nargs=1
- \0- List l
- |0- WhileExpr:
- |- Condition: BinOpExpr (Operator='>')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: CastExpr (Target='Token')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: free
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: del
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: clear
- \- Arguments: (Len=0)
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: free
- \- Arguments: (Len=0)
- \3- ReturnExpr: <void>
- |38- SepExpr (Consumed=2)
- |39- FunctionDecl:
- |- Head: FunctionDeclHead: Name='List:append_TT' Type='void' Nargs=2
- |0- List l
- \1- TokenType t
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append
- \- Arguments: (Len=1)
- \0- CastExpr (Target='ptr')
- \- Value: NameExpr: 't'
- \1- ReturnExpr: <void>
- |40- SepExpr (Consumed=2)
- |41- FunctionDecl:
- |- Head: FunctionDeclHead: Name='lex::init_default' Type='void' Nargs=1
- \0- List t
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_fn'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_LINE_COMMENT
- \1- CastExpr (Target='TokenMatcher')
- \- Value: NameExpr: 'lex$$match_line_comment'
- \- Field: notoken
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_fn'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_BLOCK_COMMENT
- \1- CastExpr (Target='TokenMatcher')
- \- Value: NameExpr: 'lex$$match_block_comment'
- \- Field: notoken
- \- Arguments: (Len=0)
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_fn'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_IMPORT
- \1- CastExpr (Target='TokenMatcher')
- \- Value: NameExpr: 'lex$$match_import'
- |3- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_fn'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_INTRINSIC
- \1- CastExpr (Target='TokenMatcher')
- \- Value: NameExpr: 'lex$$match_intrinsic'
- |4- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_kw'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_IF
- \1- LiteralExpr: type=cstr, value=if
- |5- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_kw'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_DONE
- \1- LiteralExpr: type=cstr, value=done
- |6- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_kw'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_DO
- \1- LiteralExpr: type=cstr, value=do
- |7- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_kw'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_ELIF
- \1- LiteralExpr: type=cstr, value=elif
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ENDOFSTATEMENT
- |8- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_kw'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_ELSE
- \1- LiteralExpr: type=cstr, value=else
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ENDOFSTATEMENT
- |9- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_kw'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_RETURN
- \1- LiteralExpr: type=cstr, value=return
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ENDOFSTATEMENT
- |10- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_kw'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_WHILE
- \1- LiteralExpr: type=cstr, value=while
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ENDOFSTATEMENT
- |11- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_kw'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_TYPEDECL
- \1- LiteralExpr: type=cstr, value=type
- |12- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_kw'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_TYPEDECL_IS
- \1- LiteralExpr: type=cstr, value=is
- |13- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_fn'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_TYPEDECL_NAME
- \1- CastExpr (Target='TokenMatcher')
- \- Value: NameExpr: 'lex$$match_identifier'
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_TYPEDECL
- |14- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_kw'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_TYPEDECL_ENDTYPE
- \1- LiteralExpr: type=cstr, value=endtype
- |15- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_kw'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_TYPEDECL_PACKED
- \1- LiteralExpr: type=cstr, value=packed
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_TYPEDECL_IS
- |16- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_kw'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_TYPEDECL_ALIAS
- \1- LiteralExpr: type=cstr, value=a
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_TYPEDECL_IS
- |17- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_eq'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_TYPEDECL_ALIAS_FUNC
- \1- LiteralExpr: type=cstr, value=function->
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_TYPEDECL_ALIAS
- |18- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_fn'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_TYPEDECL_ALIAS_FUNC_RT
- \1- CastExpr (Target='TokenMatcher')
- \- Value: NameExpr: 'lex$$match_identifier'
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_TYPEDECL_ALIAS_FUNC
- |19- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_fn'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_TYPEDECL_ALIAS_NAME
- \1- CastExpr (Target='TokenMatcher')
- \- Value: NameExpr: 'lex$$match_identifier'
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_TYPEDECL_ALIAS
- |20- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_eq'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_FUNCTIONDECL
- \1- LiteralExpr: type=cstr, value=function
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ENDOFSTATEMENT
- |21- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_eq'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_ARGLIST_START
- \1- LiteralExpr: type=cstr, value=(
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_FUNCTIONDECL
- |22- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_fn'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_ARGLIST_ELE
- \1- CastExpr (Target='TokenMatcher')
- \- Value: NameExpr: 'lex$$match_var_decl'
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ARGLIST_START
- \- Field: or
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ARGLIST_SEP
- |23- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_eq'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_ARGLIST_SEP
- \1- LiteralExpr: type=cstr, value=,
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ARGLIST_ELE
- |24- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_eq'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_ARGLIST_END
- \1- LiteralExpr: type=cstr, value=)
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ARGLIST_ELE
- \- Field: or
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ARGLIST_START
- |25- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_fn'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_FUNCTIONDECL_NAME
- \1- CastExpr (Target='TokenMatcher')
- \- Value: NameExpr: 'lex$$match_function_identifier'
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ARGLIST_END
- |26- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_eq'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_FUNCTIONDECL_RETURN
- \1- LiteralExpr: type=cstr, value=->
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_FUNCTIONDECL_NAME
- |27- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_fn'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_FUNCTIONDECL_RETURN_TY
- \1- CastExpr (Target='TokenMatcher')
- \- Value: NameExpr: 'lex$$match_identifier'
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_FUNCTIONDECL_RETURN
- |28- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_kw'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_FUNCTIONDECL_DOES
- \1- LiteralExpr: type=cstr, value=does
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_FUNCTIONDECL_RETURN_TY
- |29- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_fn'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_INT_LITERAL
- \1- CastExpr (Target='TokenMatcher')
- \- Value: NameExpr: 'lex$$match_int_literal'
- |30- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_fn'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_BOOL_LITERAL
- \1- CastExpr (Target='TokenMatcher')
- \- Value: NameExpr: 'lex$$match_bool_literal'
- |31- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_eq'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_NULL_LITERAL
- \1- LiteralExpr: type=cstr, value=null
- |32- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_fn'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_FLOAT_LITERAL
- \1- CastExpr (Target='TokenMatcher')
- \- Value: NameExpr: 'lex$$match_float_literal'
- |33- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_fn'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_STRING_LITERAL
- \1- CastExpr (Target='TokenMatcher')
- \- Value: NameExpr: 'lex$$match_string_literal'
- |34- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_fn'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_VAR_DECL
- \1- CastExpr (Target='TokenMatcher')
- \- Value: NameExpr: 'lex$$match_var_decl'
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ENDOFSTATEMENT
- |35- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_fn'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_NAME
- \1- CastExpr (Target='TokenMatcher')
- \- Value: NameExpr: 'lex$$match_identifier'
- |36- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_fn'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_AUGASSIGN
- \1- CastExpr (Target='TokenMatcher')
- \- Value: NameExpr: 'lex$$match_augassign'
- |37- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TokenType$$new_fn'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_BINOP
- \1- CastExpr (Target='TokenMatcher')
- \- Value: NameExpr: 'lex$$match_binop'
- \- Field: after
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_NAME
- \- Field: or
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_BRACKET_CLOSE
- \- Field: or
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_PAREN_CLOSE
- \- Field: or
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_INT_LITERAL
- \- Field: or
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_STRING_LITERAL
- \- Field: or
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_FLOAT_LITERAL
- |38- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_eq'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_ASSIGN
- \1- LiteralExpr: type=cstr, value==
- |39- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_eq'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_PAREN_OPEN
- \1- LiteralExpr: type=cstr, value=(
- |40- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_eq'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_PAREN_CLOSE
- \1- LiteralExpr: type=cstr, value=)
- |41- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_eq'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_CAST
- \1- LiteralExpr: type=cstr, value=|
- |42- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_eq'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_DOT
- \1- LiteralExpr: type=cstr, value=.
- |43- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_eq'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_BRACKET_OPEN
- \1- LiteralExpr: type=cstr, value=[
- |44- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_eq'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_BRACKET_CLOSE
- \1- LiteralExpr: type=cstr, value=]
- |45- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_eq'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_DOT
- \1- LiteralExpr: type=cstr, value=.
- |46- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_eq'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_COMMA
- \1- LiteralExpr: type=cstr, value=,
- |47- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_eq'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_DOUBLECOLON
- \1- LiteralExpr: type=cstr, value=::
- |48- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_eq'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_COLON
- \1- LiteralExpr: type=cstr, value=:
- |49- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_in'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_UNOP
- \1- LiteralExpr: type=cstr, value=-!
- |50- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: append_TT
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TokenType$$new_in'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=T_ENDOFSTATEMENT
- \1- LiteralExpr: type=cstr, value=\r\n;
- \51- ReturnExpr: <void>
- |42- SepExpr (Consumed=2)
- |43- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:tokty_by_name' Type='TokenType' Nargs=2
- |0- Project p
- \1- cstr name
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: token_types
- \- Field: len
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='TokenType')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: token_types
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: name
- \- RHS: NameExpr: 'name'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CastExpr (Target='TokenType')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: token_types
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \2- ReturnExpr: CastExpr (Target='TokenType')
- \- Value: LiteralExpr: type=ptr, value=0
- |44- SepExpr (Consumed=2)
- |45- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:tokenize' Type='List' Nargs=2
- |0- Project p
- \1- cstr text
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'ProgressBar bar'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'ProgressBar$$new'
- \- Arguments: (Len=3)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: len
- \- Arguments: (Len=0)
- |1- LiteralExpr: type=int, value=40
- \2- LiteralExpr: type=cstr, value=Tokenizing...
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int text_pos'
- \- RHS: LiteralExpr: type=int, value=0
- |2- DeclExpr: 'int current_matcher_idx'
- |3- DeclExpr: 'TokenType current_matcher'
- |4- DeclExpr: 'int dbg_print_token_pos'
- |5- DeclExpr: 'int match_len'
- |6- DeclExpr: 'bool matched'
- |7- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'List tokens'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'List$$new'
- \- Arguments: (Len=0)
- |8- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'tokens'
- \- Field: append
- \- Arguments: (Len=1)
- \0- CastExpr (Target='ptr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: tokty_by_name
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ENDOFSTATEMENT
- \- Field: make_token
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=;
- |9- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'bool ok'
- \- RHS: LiteralExpr: type=bool, value=1
- |10- WhileExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'text_pos'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: len
- \- Arguments: (Len=0)
- \- RHS: NameExpr: 'ok'
- |- Body: BlockBody: (N_Statements=5)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'current_matcher_idx'
- \- RHS: LiteralExpr: type=int, value=0
- |1- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'matched'
- \- RHS: LiteralExpr: type=bool, value=0
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'current_matcher_idx'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: token_types
- \- Field: len
- \- RHS: UnOpExpr (Operator='-')
- \- Value: NameExpr: 'matched'
- |- Body: BlockBody: (N_Statements=4)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'current_matcher'
- \- RHS: CastExpr (Target='TokenType')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: token_types
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'current_matcher_idx'
- |1- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'match_len'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'current_matcher'
- \- Field: match
- \- Arguments: (Len=2)
- |0- NameExpr: 'tokens'
- \1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: offset
- \- Arguments: (Len=1)
- \0- NameExpr: 'text_pos'
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='>')
- |- LHS: NameExpr: 'match_len'
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'matched'
- \- RHS: LiteralExpr: type=bool, value=1
- |1- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'current_matcher'
- \- Field: produce_token
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'tokens'
- \- Field: append
- \- Arguments: (Len=1)
- \0- CastExpr (Target='ptr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'current_matcher'
- \- Field: make_token
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: offset
- \- Arguments: (Len=1)
- \0- NameExpr: 'text_pos'
- |2- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'text_pos'
- \- RHS: NameExpr: 'match_len'
- |3- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'current_matcher_idx'
- \- RHS: LiteralExpr: type=int, value=1
- |3- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: NameExpr: 'text_pos'
- \- Field: in
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value= \t
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'text_pos'
- \- RHS: LiteralExpr: type=int, value=1
- \-- Runoff Clause: IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: NameExpr: 'text_pos'
- \- Field: in
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\\
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'text_pos'
- \- RHS: LiteralExpr: type=int, value=1
- |1- WhileExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: IndexExpr
- |- Array: NameExpr: 'text'
- \- Value: NameExpr: 'text_pos'
- \- Field: in
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value= \t\r\n
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'text_pos'
- \- RHS: LiteralExpr: type=int, value=1
- \-- Runoff Clause: IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: NameExpr: 'matched'
- |- Body: BlockBody: (N_Statements=3)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=E: can't match any furter after %i:`%s`\n
- |1- NameExpr: 'text_pos'
- \2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'text'
- \- Field: offset
- \- Arguments: (Len=1)
- \0- NameExpr: 'text_pos'
- |1- CallExpr:
- |- Method: NameExpr: 'shoc$$bail_out'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Can't match input string
- |2- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'ok'
- \- RHS: LiteralExpr: type=bool, value=0
- |4- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'bar'
- \- Field: update
- \- Arguments: (Len=1)
- \0- NameExpr: 'text_pos'
- |11- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'bar'
- \- Field: free
- \- Arguments: (Len=0)
- \12- ReturnExpr: NameExpr: 'tokens'
- |46- SepExpr (Consumed=1)
- |2- SepExpr (Consumed=2)
- |3- FileNode: (N_Statements=43)
- |0- SepExpr (Consumed=1)
- |1- SepExpr (Consumed=1)
- |2- SepExpr (Consumed=1)
- |3- FileNode: (N_Statements=5)
- |0- SepExpr (Consumed=1)
- |1- SepExpr (Consumed=1)
- |2- SepExpr (Consumed=2)
- |3- TypeDecl:
- |- Head: TypeDeclHead: `ProgressBar` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=0)
- \- Body: TypeDeclBody: (N_Statements=12)
- |0- DeclExpr: 'int last_update'
- |1- DeclExpr: 'int steps'
- |2- DeclExpr: 'int out_of'
- |3- DeclExpr: 'int step'
- |4- DeclExpr: 'cstr text'
- |5- DeclExpr: 'bool reverse'
- |6- DeclExpr: 'bool finished'
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ProgressBar::new' Type='ProgressBar' Nargs=3
- |0- int out_of
- |1- int steps
- \2- cstr text
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'ProgressBar new'
- \- RHS: CastExpr (Target='ProgressBar')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(ProgressBar)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: out_of
- \- RHS: NameExpr: 'out_of'
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: steps
- \- RHS: NameExpr: 'steps'
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: last_update
- \- RHS: UnOpExpr (Operator='-')
- \- Value: LiteralExpr: type=int, value=1
- |4- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: step
- \- RHS: CastExpr (Target='int')
- \- Value: GroupingExpr: BinOpExpr (Operator='/')
- |- LHS: NameExpr: 'out_of'
- \- RHS: NameExpr: 'steps'
- |5- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: reverse
- \- RHS: LiteralExpr: type=bool, value=0
- |6- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: text
- \- RHS: NameExpr: 'text'
- |7- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: finished
- \- RHS: LiteralExpr: type=bool, value=0
- |8- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: step
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: step
- \- RHS: LiteralExpr: type=int, value=1
- \9- ReturnExpr: NameExpr: 'new'
- |8- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ProgressBar::new_reversed' Type='ProgressBar' Nargs=3
- |0- int out_of
- |1- int steps
- \2- cstr text
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'ProgressBar new'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'ProgressBar'
- \- Field: new
- \- Arguments: (Len=3)
- |0- NameExpr: 'out_of'
- |1- NameExpr: 'steps'
- \2- NameExpr: 'text'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: reverse
- \- RHS: LiteralExpr: type=bool, value=1
- \2- ReturnExpr: NameExpr: 'new'
- |9- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ProgressBar:update' Type='void' Nargs=2
- |0- ProgressBar self
- \1- int pos
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: finished
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: <void>
- |1- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: reverse
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'pos'
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: out_of
- \- RHS: NameExpr: 'pos'
- |2- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int cur_state'
- \- RHS: GroupingExpr: BinOpExpr (Operator='/')
- |- LHS: NameExpr: 'pos'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: step
- |3- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: BinOpExpr (Operator='>')
- |- LHS: NameExpr: 'cur_state'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: last_update
- \- Field: or
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'pos'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: out_of
- |- Body: BlockBody: (N_Statements=9)
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int pct'
- \- RHS: CastExpr (Target='int')
- \- Value: GroupingExpr: BinOpExpr (Operator='*')
- |- LHS: GroupingExpr: BinOpExpr (Operator='/')
- |- LHS: CastExpr (Target='float')
- \- Value: NameExpr: 'pos'
- \- RHS: CastExpr (Target='float')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: out_of
- \- RHS: LiteralExpr: type=float, value=100.
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: last_update
- \- RHS: NameExpr: 'cur_state'
- |2- CallExpr:
- |- Method: NameExpr: 'fprintf'
- \- Arguments: (Len=5)
- |0- NameExpr: 'stdout'
- |1- LiteralExpr: type=cstr, value=\r%s %010i/%010i [
- |2- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: text
- |3- NameExpr: 'pos'
- \4- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: out_of
- |3- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=1
- |4- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: steps
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: BinOpExpr (Operator='&')
- |- LHS: GroupingExpr: BinOpExpr (Operator='>=')
- |- LHS: NameExpr: 'pos'
- \- RHS: GroupingExpr: BinOpExpr (Operator='*')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: step
- \- RHS: GroupingExpr: BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \- RHS: UnOpExpr (Operator='-')
- \- Value: GroupingExpr: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'i'
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: steps
- \- RHS: LiteralExpr: type=int, value=1
- \- Field: or
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'pct'
- \- RHS: LiteralExpr: type=int, value=100
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'fprintf'
- \- Arguments: (Len=2)
- |0- NameExpr: 'stdout'
- \1- LiteralExpr: type=cstr, value==
- \-- Runoff Clause: IfExpr:
- |- Condition: GroupingExpr: BinOpExpr (Operator='>=')
- |- LHS: NameExpr: 'pos'
- \- RHS: GroupingExpr: BinOpExpr (Operator='*')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: step
- \- RHS: NameExpr: 'i'
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'fprintf'
- \- Arguments: (Len=2)
- |0- NameExpr: 'stdout'
- \1- LiteralExpr: type=cstr, value=>
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'fprintf'
- \- Arguments: (Len=2)
- |0- NameExpr: 'stdout'
- \1- LiteralExpr: type=cstr, value=
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |5- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'pct'
- \- RHS: LiteralExpr: type=int, value=100
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'fprintf'
- \- Arguments: (Len=2)
- |0- NameExpr: 'stdout'
- \1- LiteralExpr: type=cstr, value==
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'fprintf'
- \- Arguments: (Len=2)
- |0- NameExpr: 'stdout'
- \1- LiteralExpr: type=cstr, value=
- |6- CallExpr:
- |- Method: NameExpr: 'fprintf'
- \- Arguments: (Len=3)
- |0- NameExpr: 'stdout'
- |1- LiteralExpr: type=cstr, value=] %03i%%
- \2- NameExpr: 'pct'
- |7- CallExpr:
- |- Method: NameExpr: 'fflush'
- \- Arguments: (Len=1)
- \0- NameExpr: 'stdout'
- |8- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'pct'
- \- RHS: LiteralExpr: type=int, value=100
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Done!\n
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: finished
- \- RHS: LiteralExpr: type=bool, value=1
- \4- ReturnExpr: <void>
- |10- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ProgressBar:done' Type='void' Nargs=1
- \0- ProgressBar self
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: update
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: out_of
- \1- ReturnExpr: <void>
- \11- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ProgressBar:free' Type='void' Nargs=1
- \0- ProgressBar self
- |0- CallExpr:
- |- Method: NameExpr: 'free'
- \- Arguments: (Len=1)
- \0- CastExpr (Target='ptr')
- \- Value: NameExpr: 'self'
- \1- ReturnExpr: <void>
- |4- SepExpr (Consumed=1)
- |4- SepExpr (Consumed=1)
- |5- FileNode: (N_Statements=10)
- |0- SepExpr (Consumed=1)
- |1- FileNode: (N_Statements=7)
- |0- SepExpr (Consumed=1)
- |1- FileNode: (N_Statements=2)
- |0- SepExpr (Consumed=1)
- |1- SepExpr (Consumed=1)
- |2- SepExpr (Consumed=2)
- |3- TypeDecl:
- |- Head: TypeDeclHead: `MapEntry` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=0)
- \- Body: TypeDeclBody: (N_Statements=3)
- |0- DeclExpr: 'cstr key'
- |1- DeclExpr: 'ptr value'
- \2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='MapEntry::new' Type='MapEntry' Nargs=2
- |0- cstr key
- \1- ptr value
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'MapEntry new'
- \- RHS: CastExpr (Target='MapEntry')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(MapEntry)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: key
- \- RHS: NameExpr: 'key'
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value
- \- RHS: NameExpr: 'value'
- \3- ReturnExpr: NameExpr: 'new'
- |4- SepExpr (Consumed=2)
- |5- TypeDecl:
- |- Head: TypeDeclHead: `StrMap` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=0)
- \- Body: TypeDeclBody: (N_Statements=8)
- |0- FunctionDecl:
- |- Head: FunctionDeclHead: Name='StrMap::new' Type='StrMap' Nargs=0
- \0- ReturnExpr: CastExpr (Target='StrMap')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- |1- FunctionDecl:
- |- Head: FunctionDeclHead: Name='StrMap:_al' Type='List' Nargs=1
- \0- StrMap self
- \0- ReturnExpr: CastExpr (Target='List')
- \- Value: NameExpr: 'self'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='StrMap:get_entry' Type='MapEntry' Nargs=2
- |0- StrMap self
- \1- cstr key
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: _al
- \- Arguments: (Len=0)
- \- Field: len
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='MapEntry')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: _al
- \- Arguments: (Len=0)
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: key
- \- RHS: NameExpr: 'key'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CastExpr (Target='MapEntry')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: _al
- \- Arguments: (Len=0)
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \2- ReturnExpr: CastExpr (Target='MapEntry')
- \- Value: LiteralExpr: type=ptr, value=0
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='StrMap:contains' Type='bool' Nargs=2
- |0- StrMap self
- \1- cstr key
- \0- ReturnExpr: BinOpExpr (Operator='!=')
- |- LHS: CastExpr (Target='ptr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: get_entry
- \- Arguments: (Len=1)
- \0- NameExpr: 'key'
- \- RHS: LiteralExpr: type=ptr, value=0
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='StrMap:set' Type='void' Nargs=3
- |0- StrMap self
- |1- cstr key
- \2- ptr value
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: contains
- \- Arguments: (Len=1)
- \0- NameExpr: 'key'
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: _al
- \- Arguments: (Len=0)
- \- Field: append
- \- Arguments: (Len=1)
- \0- CastExpr (Target='ptr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'MapEntry'
- \- Field: new
- \- Arguments: (Len=2)
- |0- NameExpr: 'key'
- \1- NameExpr: 'value'
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: get_entry
- \- Arguments: (Len=1)
- \0- NameExpr: 'key'
- \- Field: value
- \- RHS: NameExpr: 'value'
- \1- ReturnExpr: <void>
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='StrMap:get' Type='ptr' Nargs=2
- |0- StrMap self
- \1- cstr key
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: contains
- \- Arguments: (Len=1)
- \0- NameExpr: 'key'
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'orth'
- \- Field: fail
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: LiteralExpr: type=cstr, value=KeyError in StrMap:
- \- RHS: NameExpr: 'key'
- \1- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: get_entry
- \- Arguments: (Len=1)
- \0- NameExpr: 'key'
- \- Field: value
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='StrMap:num_keys' Type='int' Nargs=1
- \0- StrMap self
- \0- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: _al
- \- Arguments: (Len=0)
- \- Field: len
- \7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='StrMap:get_by_num' Type='ptr' Nargs=2
- |0- StrMap self
- \1- int req
- \0- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='MapEntry')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: _al
- \- Arguments: (Len=0)
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'req'
- \- Field: value
- |6- SepExpr (Consumed=1)
- |2- SepExpr (Consumed=1)
- |3- SepExpr (Consumed=2)
- |4- TypeDeclHead: `NodeTransformer` (Is_Func_Alias=1, Is_Type_Alias:0, Is_Packed=0) Aliases Function->`Node`
- |5- SepExpr (Consumed=2)
- |6- TypeDecl:
- |- Head: TypeDeclHead: `TransformerPass` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=0)
- \- Body: TypeDeclBody: (N_Statements=10)
- |0- DeclExpr: 'cstr name'
- |1- DeclExpr: 'StrMap visitor_map'
- |2- DeclExpr: 'ptr extra_info'
- |3- DeclExpr: 'Project proj'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TransformerPass::new' Type='TransformerPass' Nargs=1
- \0- cstr name
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'TransformerPass new'
- \- RHS: CastExpr (Target='TransformerPass')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(TransformerPass)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: name
- \- RHS: NameExpr: 'name'
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: visitor_map
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'StrMap'
- \- Field: new
- \- Arguments: (Len=0)
- \3- ReturnExpr: NameExpr: 'new'
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TransformerPass:set_project' Type='TransformerPass' Nargs=2
- |0- TransformerPass p
- \1- Project proj
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \- RHS: NameExpr: 'proj'
- \1- ReturnExpr: NameExpr: 'p'
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TransformerPass:add_specialization' Type='TransformerPass' Nargs=3
- |0- TransformerPass self
- |1- cstr node_type
- \2- NodeTransformer visitor
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: visitor_map
- \- Field: set
- \- Arguments: (Len=2)
- |0- NameExpr: 'node_type'
- \1- CastExpr (Target='ptr')
- \- Value: NameExpr: 'visitor'
- \1- ReturnExpr: NameExpr: 'self'
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TransformerPass:set_info' Type='TransformerPass' Nargs=2
- |0- TransformerPass self
- \1- ptr info
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: extra_info
- \- RHS: NameExpr: 'info'
- \1- ReturnExpr: NameExpr: 'self'
- |8- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TransformerPass:visit_children' Type='void' Nargs=2
- |0- TransformerPass self
- \1- Node n
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'n'
- \- Field: run_transformer_on_children
- \- Arguments: (Len=1)
- \0- NameExpr: 'self'
- \1- ReturnExpr: <void>
- \9- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TransformerPass:visit' Type='Node' Nargs=2
- |0- TransformerPass self
- \1- Node n
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: visit_children
- \- Arguments: (Len=1)
- \0- NameExpr: 'n'
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: visitor_map
- \- Field: contains
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: type_
- \- Field: name
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'ptr entry'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: visitor_map
- \- Field: get
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: type_
- \- Field: name
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'NodeTransformer v'
- \- RHS: CastExpr (Target='NodeTransformer')
- \- Value: NameExpr: 'entry'
- |2- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'v'
- \- Arguments: (Len=2)
- |0- NameExpr: 'n'
- \1- NameExpr: 'self'
- \2- ReturnExpr: NameExpr: 'n'
- |7- SepExpr (Consumed=2)
- |8- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:run_transformers' Type='Node' Nargs=2
- |0- Project p
- \1- Node n
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: transformer_passes
- \- Field: len
- |- Body: BlockBody: (N_Statements=3)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=Running transformer pass '%s'\n
- \1- AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='TransformerPass')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: transformer_passes
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: name
- |1- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'n'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CastExpr (Target='TransformerPass')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: transformer_passes
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- NameExpr: 'n'
- |2- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \2- ReturnExpr: NameExpr: 'n'
- |9- SepExpr (Consumed=1)
- |6- SepExpr (Consumed=2)
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Token:is_a' Type='bool' Nargs=2
- |0- Token self
- \1- cstr type_
- \0- ReturnExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: type_
- \- Field: name
- \- RHS: NameExpr: 'type_'
- |8- SepExpr (Consumed=2)
- |9- FunctionDecl:
- |- Head: FunctionDeclHead: Name='parse::indent' Type='void' Nargs=1
- \0- int depth
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: NameExpr: 'depth'
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\t
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \2- ReturnExpr: <void>
- |10- SepExpr (Consumed=2)
- |11- TypeDecl:
- |- Head: TypeDeclHead: `Node` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=6)
- |0- DeclExpr: 'NodeType type_'
- |1- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Node:free' Type='void' Nargs=1
- \0- Node self
- |0- LiteralExpr: type=int, value=0
- \1- ReturnExpr: <void>
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Node:print' Type='void' Nargs=2
- |0- Node self
- \1- int depth
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: type_
- \- Field: printer
- \- Arguments: (Len=2)
- |0- NameExpr: 'self'
- \1- NameExpr: 'depth'
- \1- ReturnExpr: <void>
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Node:print_root' Type='void' Nargs=1
- \0- Node self
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: print
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \1- ReturnExpr: <void>
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Node:is_a' Type='bool' Nargs=2
- |0- Node self
- \1- cstr ty
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: type_
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- NameExpr: 'ty'
- \5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Node:run_transformer_on_children' Type='void' Nargs=2
- |0- Node self
- \1- TransformerPass p
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: type_
- \- Field: child_visitor
- \- Arguments: (Len=2)
- |0- NameExpr: 'self'
- \1- NameExpr: 'p'
- \1- ReturnExpr: <void>
- |12- SepExpr (Consumed=2)
- |13- TypeDecl:
- |- Head: TypeDeclHead: `Element` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=0)
- \- Body: TypeDeclBody: (N_Statements=8)
- |0- DeclExpr: 'bool is_token'
- |1- DeclExpr: 'ptr thing'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Element::from_token' Type='Element' Nargs=1
- \0- Token t
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'Element new'
- \- RHS: CastExpr (Target='Element')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(Element)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: is_token
- \- RHS: LiteralExpr: type=bool, value=1
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: thing
- \- RHS: CastExpr (Target='ptr')
- \- Value: NameExpr: 't'
- \3- ReturnExpr: NameExpr: 'new'
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Element::from_node' Type='Element' Nargs=1
- \0- Node n
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'Element new'
- \- RHS: CastExpr (Target='Element')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(Element)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: is_token
- \- RHS: LiteralExpr: type=bool, value=0
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: thing
- \- RHS: CastExpr (Target='ptr')
- \- Value: NameExpr: 'n'
- \3- ReturnExpr: NameExpr: 'new'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Element:t' Type='Token' Nargs=1
- \0- Element self
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=4)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\nE: shoc/parse//Token:t() on non-token\n
- |1- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\tCalled on:
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: print
- \- Arguments: (Len=0)
- |3- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'shoc'
- \- Field: bail_out
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Invalid Element Narrowing
- \1- ReturnExpr: CastExpr (Target='Token')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: thing
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Element:n' Type='Node' Nargs=1
- \0- Element self
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=4)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\nE: shoc/parse//Token:n() on non-node\n
- |1- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\tCalled on:
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: print
- \- Arguments: (Len=0)
- |3- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'shoc'
- \- Field: bail_out
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Invalid Element Narrowing
- \1- ReturnExpr: CastExpr (Target='Node')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: thing
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Element:print' Type='void' Nargs=1
- \0- Element self
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=%s(%s)\n
- |1- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \2- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: print
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \1- ReturnExpr: <void>
- \7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Element:free' Type='void' Nargs=1
- \0- Element self
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: CastExpr (Target='Token')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: thing
- \- Field: free
- \- Arguments: (Len=0)
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: CastExpr (Target='Node')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: thing
- \- Field: free
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: NameExpr: 'free'
- \- Arguments: (Len=1)
- \0- CastExpr (Target='ptr')
- \- Value: NameExpr: 'self'
- \2- ReturnExpr: <void>
- |14- SepExpr (Consumed=2)
- |15- TypeDecl:
- |- Head: TypeDeclHead: `EleList` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=0)
- \- Body: TypeDeclBody: (N_Statements=11)
- |0- DeclExpr: 'int position'
- |1- DeclExpr: 'List list'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='EleList::from' Type='EleList' Nargs=1
- \0- List l
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'EleList new'
- \- RHS: CastExpr (Target='EleList')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(EleList)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: list
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- |2- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |3- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: list
- \- Field: append
- \- Arguments: (Len=1)
- \0- CastExpr (Target='ptr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'Element'
- \- Field: from_token
- \- Arguments: (Len=1)
- \0- CastExpr (Target='Token')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |4- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: position
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'l'
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- \5- ReturnExpr: NameExpr: 'new'
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='EleList:get' Type='Element' Nargs=2
- |0- EleList self
- \1- int pos
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='>=')
- |- LHS: GroupingExpr: BinOpExpr (Operator='+')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: position
- \- RHS: NameExpr: 'pos'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: list
- \- Field: len
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'shoc'
- \- Field: bail_out
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: LiteralExpr: type=cstr, value=Requested EleList pos > than exists,
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: BinOpExpr (Operator='+')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: position
- \- RHS: NameExpr: 'pos'
- \- Field: str
- \- Arguments: (Len=0)
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: LiteralExpr: type=cstr, value=>
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: list
- \- Field: len
- \- Field: str
- \- Arguments: (Len=0)
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: GroupingExpr: BinOpExpr (Operator='+')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: position
- \- RHS: NameExpr: 'pos'
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'shoc'
- \- Field: bail_out
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Requested EleList pos <0
- \2- ReturnExpr: CastExpr (Target='Element')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: list
- \- Field: get
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: position
- \- RHS: NameExpr: 'pos'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='EleList:get_lookahead' Type='Element' Nargs=1
- \0- EleList self
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: get
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: LiteralExpr: type=int, value=1
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='EleList:has_lookahead' Type='bool' Nargs=1
- \0- EleList self
- \0- ReturnExpr: BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: position
- \- RHS: LiteralExpr: type=int, value=0
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='EleList:advance' Type='EleList' Nargs=2
- |0- EleList self
- \1- int by
- |0- AssignmentExpr (Operator='-=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: position
- \- RHS: NameExpr: 'by'
- \1- ReturnExpr: NameExpr: 'self'
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='EleList:in_slice' Type='int' Nargs=1
- \0- EleList self
- \0- ReturnExpr: BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: list
- \- Field: len
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: position
- |8- FunctionDecl:
- |- Head: FunctionDeclHead: Name='EleList:set_tail' Type='EleList' Nargs=3
- |0- EleList self
- |1- int count
- \2- Element e
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: NameExpr: 'count'
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: list
- \- Field: del
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: position
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: list
- \- Field: insert
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: position
- \1- CastExpr (Target='ptr')
- \- Value: NameExpr: 'e'
- \3- ReturnExpr: NameExpr: 'self'
- |9- FunctionDecl:
- |- Head: FunctionDeclHead: Name='EleList:print' Type='void' Nargs=1
- \0- EleList self
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: list
- \- Field: len
- |- Body: BlockBody: (N_Statements=5)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=%03i
- \1- NameExpr: 'i'
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: position
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=*
- |2- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\t
- |3- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: CastExpr (Target='Element')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: list
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: print
- \- Arguments: (Len=0)
- |4- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \2- ReturnExpr: <void>
- \10- FunctionDecl:
- |- Head: FunctionDeclHead: Name='EleList:print_depth' Type='void' Nargs=2
- |0- EleList self
- \1- int depth
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: list
- \- Field: len
- |- Body: BlockBody: (N_Statements=6)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- NameExpr: 'depth'
- |1- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=%03i
- \1- NameExpr: 'i'
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: position
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=*
- |3- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\t
- |4- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='Element')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: list
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: CastExpr (Target='Element')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: list
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: print
- \- Arguments: (Len=0)
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: CastExpr (Target='Element')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: list
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |5- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \2- ReturnExpr: <void>
- |16- SepExpr (Consumed=2)
- |17- TypeDeclHead: `NodeDeleter` (Is_Func_Alias=1, Is_Type_Alias:0, Is_Packed=0) Aliases Function->`void`
- |18- SepExpr (Consumed=1)
- |19- TypeDeclHead: `NodePrinter` (Is_Func_Alias=1, Is_Type_Alias:0, Is_Packed=0) Aliases Function->`void`
- |20- SepExpr (Consumed=1)
- |21- TypeDeclHead: `NodeVisitor` (Is_Func_Alias=1, Is_Type_Alias:0, Is_Packed=0) Aliases Function->`void`
- |22- SepExpr (Consumed=1)
- |23- TypeDeclHead: `NodeCreator` (Is_Func_Alias=1, Is_Type_Alias:0, Is_Packed=0) Aliases Function->`Node`
- |24- SepExpr (Consumed=1)
- |25- TypeDeclHead: `NodeMatcher` (Is_Func_Alias=1, Is_Type_Alias:0, Is_Packed=0) Aliases Function->`int`
- |26- SepExpr (Consumed=2)
- |27- FunctionDecl:
- |- Head: FunctionDeclHead: Name='_default_node_child_visitor' Type='void' Nargs=2
- |0- Node n
- \1- TransformerPass p
- \0- ReturnExpr: <void>
- |28- SepExpr (Consumed=2)
- |29- TypeDecl:
- |- Head: TypeDeclHead: `NodeType` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=0)
- \- Body: TypeDeclBody: (N_Statements=24)
- |0- DeclExpr: 'cstr name'
- |1- DeclExpr: 'List things_i_am'
- |2- DeclExpr: 'NodePrinter printer'
- |3- DeclExpr: 'NodeDeleter deleter'
- |4- DeclExpr: 'NodeCreator creator'
- |5- DeclExpr: 'NodeVisitor child_visitor'
- |6- DeclExpr: 'int matcher_flags'
- |7- DeclExpr: 'int matcher_count'
- |8- DeclExpr: 'NodeMatcher matcher'
- |9- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NodeType:set_printer' Type='NodeType' Nargs=2
- |0- NodeType self
- \1- NodePrinter p
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: printer
- \- RHS: NameExpr: 'p'
- \1- ReturnExpr: NameExpr: 'self'
- |10- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NodeType:set_visitor' Type='NodeType' Nargs=2
- |0- NodeType self
- \1- NodeVisitor v
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: child_visitor
- \- RHS: NameExpr: 'v'
- \1- ReturnExpr: NameExpr: 'self'
- |11- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NodeType:set_deleter' Type='NodeType' Nargs=2
- |0- NodeType self
- \1- NodeDeleter d
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: deleter
- \- RHS: NameExpr: 'd'
- \1- ReturnExpr: NameExpr: 'self'
- |12- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NodeType:set_creator' Type='NodeType' Nargs=2
- |0- NodeType self
- \1- NodeCreator d
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: creator
- \- RHS: NameExpr: 'd'
- \1- ReturnExpr: NameExpr: 'self'
- |13- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NodeType:set_matcher' Type='NodeType' Nargs=2
- |0- NodeType self
- \1- NodeMatcher m
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: matcher
- \- RHS: NameExpr: 'm'
- \1- ReturnExpr: NameExpr: 'self'
- |14- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NodeType:create_node' Type='Node' Nargs=2
- |0- NodeType self
- \1- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'Node new'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: creator
- \- Arguments: (Len=1)
- \0- NameExpr: 'eles'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: type_
- \- RHS: NameExpr: 'self'
- \2- ReturnExpr: NameExpr: 'new'
- |15- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NodeType::new' Type='NodeType' Nargs=1
- \0- cstr name
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'NodeType new'
- \- RHS: CastExpr (Target='NodeType')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(NodeType)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: name
- \- RHS: NameExpr: 'name'
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: child_visitor
- \- RHS: CastExpr (Target='NodeVisitor')
- \- Value: NameExpr: '_default_node_child_visitor'
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: things_i_am
- \- RHS: CastExpr (Target='List')
- \- Value: LiteralExpr: type=ptr, value=0
- |4- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: matcher_count
- \- RHS: LiteralExpr: type=int, value=1
- |5- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: matcher_flags
- \- RHS: LiteralExpr: type=int, value=0
- \6- ReturnExpr: NameExpr: 'new'
- |16- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NodeType:match' Type='int' Nargs=2
- |0- NodeType self
- \1- EleList elements
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'elements'
- \- Field: in_slice
- \- Arguments: (Len=0)
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: matcher_count
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: matcher_flags
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: matcher_count
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: BinOpExpr (Operator='&')
- |- LHS: GroupingExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: matcher_flags
- \- RHS: LiteralExpr: type=int, value=1
- \- RHS: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'elements'
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='&')
- |- LHS: GroupingExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: matcher_flags
- \- RHS: LiteralExpr: type=int, value=2
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'elements'
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \2- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: matcher
- \- Arguments: (Len=1)
- \0- NameExpr: 'elements'
- |17- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NodeType:matches' Type='NodeType' Nargs=2
- |0- NodeType self
- \1- int count
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: matcher_count
- \- RHS: NameExpr: 'count'
- \1- ReturnExpr: NameExpr: 'self'
- |18- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NodeType:matches_only_tokens' Type='NodeType' Nargs=1
- \0- NodeType self
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: matcher_flags
- \- RHS: LiteralExpr: type=int, value=1
- \1- ReturnExpr: NameExpr: 'self'
- |19- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NodeType:matches_only_nodes' Type='NodeType' Nargs=1
- \0- NodeType self
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: matcher_flags
- \- RHS: LiteralExpr: type=int, value=2
- \1- ReturnExpr: NameExpr: 'self'
- |20- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NodeType:isinstance' Type='bool' Nargs=2
- |0- NodeType self
- \1- cstr thing
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'thing'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: name
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=bool, value=1
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: CastExpr (Target='ptr')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: things_i_am
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=bool, value=0
- |2- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |3- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: things_i_am
- \- Field: len
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: GroupingExpr: CastExpr (Target='cstr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: things_i_am
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- RHS: NameExpr: 'thing'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=bool, value=1
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \4- ReturnExpr: LiteralExpr: type=bool, value=0
- |21- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NodeType:is_a' Type='bool' Nargs=2
- |0- NodeType self
- \1- cstr thing
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: isinstance
- \- Arguments: (Len=1)
- \0- NameExpr: 'thing'
- |22- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NodeType:addtype' Type='NodeType' Nargs=2
- |0- NodeType self
- \1- cstr thing
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: CastExpr (Target='ptr')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: things_i_am
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: things_i_am
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: things_i_am
- \- Field: append
- \- Arguments: (Len=1)
- \0- CastExpr (Target='ptr')
- \- Value: NameExpr: 'thing'
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'thing'
- \- RHS: LiteralExpr: type=cstr, value=ValueExpression
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Expression
- |3- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'thing'
- \- RHS: LiteralExpr: type=cstr, value=IdentifierExpression
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- \4- ReturnExpr: NameExpr: 'self'
- \23- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NodeType:free' Type='void' Nargs=1
- \0- NodeType self
- |0- CallExpr:
- |- Method: NameExpr: 'free'
- \- Arguments: (Len=1)
- \0- CastExpr (Target='ptr')
- \- Value: NameExpr: 'self'
- \1- ReturnExpr: <void>
- |30- SepExpr (Consumed=2)
- |31- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:type_by_name' Type='NodeType' Nargs=2
- |0- Project p
- \1- cstr name
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: node_types
- \- Field: len
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='NodeType')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: node_types
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: name
- \- RHS: NameExpr: 'name'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CastExpr (Target='NodeType')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: node_types
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \2- ReturnExpr: CastExpr (Target='NodeType')
- \- Value: LiteralExpr: type=ptr, value=0
- |32- SepExpr (Consumed=2)
- |33- FunctionDecl:
- |- Head: FunctionDeclHead: Name='List:append_NodeType' Type='void' Nargs=2
- |0- List l
- \1- NodeType n
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append
- \- Arguments: (Len=1)
- \0- CastExpr (Target='ptr')
- \- Value: NameExpr: 'n'
- \1- ReturnExpr: <void>
- |34- SepExpr (Consumed=2)
- |35- FunctionDecl:
- |- Head: FunctionDeclHead: Name='List:append_Node' Type='void' Nargs=2
- |0- List l
- \1- Node n
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append
- \- Arguments: (Len=1)
- \0- CastExpr (Target='ptr')
- \- Value: NameExpr: 'n'
- \1- ReturnExpr: <void>
- |36- SepExpr (Consumed=2)
- |37- FunctionDecl:
- |- Head: FunctionDeclHead: Name='List:get_Node' Type='Node' Nargs=2
- |0- List l
- \1- int n
- \0- ReturnExpr: CastExpr (Target='Node')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'n'
- |38- SepExpr (Consumed=2)
- |39- FunctionDecl:
- |- Head: FunctionDeclHead: Name='parse::update_viz' Type='void' Nargs=2
- |0- EleList e
- \1- cstr s
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'bool fancy'
- \- RHS: LiteralExpr: type=bool, value=0
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'float speed'
- \- RHS: LiteralExpr: type=float, value=0.0
- |2- IfExpr:
- |- Condition: NameExpr: 'fancy'
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: NameExpr: 'usleep'
- \- Arguments: (Len=1)
- \0- CastExpr (Target='int')
- \- Value: BinOpExpr (Operator='*')
- |- LHS: NameExpr: 'speed'
- \- RHS: LiteralExpr: type=float, value=1000000.
- |1- CallExpr:
- |- Method: NameExpr: 'system'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=clear
- |3- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=\n\nParsing '%s'\n\n
- \1- NameExpr: 's'
- |4- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'e'
- \- Field: print
- \- Arguments: (Len=0)
- \5- ReturnExpr: <void>
- |40- SepExpr (Consumed=2)
- |41- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:parse' Type='Node' Nargs=3
- |0- Project p
- |1- List tokens
- \2- cstr text
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'EleList eles'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'EleList$$from'
- \- Arguments: (Len=1)
- \0- NameExpr: 'tokens'
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'ProgressBar bar'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'ProgressBar$$new_reversed'
- \- Arguments: (Len=3)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'tokens'
- \- Field: len
- |1- LiteralExpr: type=int, value=40
- \2- LiteralExpr: type=cstr, value=Parsing......
- |2- DeclExpr: 'bool progress'
- |3- DeclExpr: 'int current_type_idx'
- |4- DeclExpr: 'NodeType current_type'
- |5- DeclExpr: 'int match_count'
- |6- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'bool DEBUG'
- \- RHS: LiteralExpr: type=bool, value=0
- |7- WhileExpr:
- |- Condition: BinOpExpr (Operator='>=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'eles'
- \- Field: position
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=5)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'progress'
- \- RHS: LiteralExpr: type=bool, value=1
- |1- WhileExpr:
- |- Condition: NameExpr: 'progress'
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'progress'
- \- RHS: LiteralExpr: type=bool, value=0
- |1- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'current_type_idx'
- \- RHS: LiteralExpr: type=int, value=0
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'current_type_idx'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: node_types
- \- Field: len
- \- RHS: UnOpExpr (Operator='-')
- \- Value: NameExpr: 'progress'
- |- Body: BlockBody: (N_Statements=4)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'current_type'
- \- RHS: CastExpr (Target='NodeType')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: node_types
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'current_type_idx'
- |1- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'match_count'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'current_type'
- \- Field: match
- \- Arguments: (Len=1)
- \0- NameExpr: 'eles'
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='>')
- |- LHS: NameExpr: 'match_count'
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=3)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: set_tail
- \- Arguments: (Len=2)
- |0- NameExpr: 'match_count'
- \1- CallExpr:
- |- Method: NameExpr: 'Element$$from_node'
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'current_type'
- \- Field: create_node
- \- Arguments: (Len=1)
- \0- NameExpr: 'eles'
- |1- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'progress'
- \- RHS: LiteralExpr: type=bool, value=1
- |2- IfExpr:
- |- Condition: NameExpr: 'DEBUG'
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: NameExpr: 'parse$$update_viz'
- \- Arguments: (Len=2)
- |0- NameExpr: 'eles'
- \1- NameExpr: 'text'
- |1- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=4)
- |0- LiteralExpr: type=cstr, value=Replaced %i elements at %i with a %s node\n
- |1- NameExpr: 'match_count'
- |2- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'eles'
- \- Field: position
- \3- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'current_type'
- \- Field: name
- |3- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'current_type_idx'
- \- RHS: LiteralExpr: type=int, value=1
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: advance
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- |3- IfExpr:
- |- Condition: NameExpr: 'DEBUG'
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: NameExpr: 'parse$$update_viz'
- \- Arguments: (Len=2)
- |0- NameExpr: 'eles'
- \1- NameExpr: 'text'
- |1- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=No further possible parses, advanced by 1\n
- |4- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'bar'
- \- Field: update
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'eles'
- \- Field: position
- \- RHS: LiteralExpr: type=int, value=1
- |8- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Done!\n
- |9- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'bar'
- \- Field: free
- \- Arguments: (Len=0)
- |10- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'eles'
- \- Field: position
- \- RHS: LiteralExpr: type=int, value=0
- \11- ReturnExpr: CastExpr (Target='Node')
- \- Value: CallExpr:
- |- Method: NameExpr: 'FileNode$$create'
- \- Arguments: (Len=2)
- |0- NameExpr: 'p'
- \1- NameExpr: 'eles'
- |42- SepExpr (Consumed=1)
- |4- SepExpr (Consumed=2)
- |5- FileNode: (N_Statements=55)
- |0- SepExpr (Consumed=1)
- |1- SepExpr (Consumed=1)
- |2- SepExpr (Consumed=2)
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='parse::lookahead_is_accessor' Type='bool' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: has_lookahead
- \- Arguments: (Len=0)
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get_lookahead
- \- Arguments: (Len=0)
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get_lookahead
- \- Arguments: (Len=0)
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_DOT
- \- Field: or
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get_lookahead
- \- Arguments: (Len=0)
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_COLON
- \- Field: or
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get_lookahead
- \- Arguments: (Len=0)
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_DOUBLECOLON
- \- Field: or
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get_lookahead
- \- Arguments: (Len=0)
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_CAST
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=bool, value=1
- \1- ReturnExpr: LiteralExpr: type=bool, value=0
- |4- SepExpr (Consumed=2)
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='parse::lookahead_is_possibly_function' Type='bool' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: has_lookahead
- \- Arguments: (Len=0)
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get_lookahead
- \- Arguments: (Len=0)
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get_lookahead
- \- Arguments: (Len=0)
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_NAME
- \- Field: or
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get_lookahead
- \- Arguments: (Len=0)
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_PAREN_CLOSE
- \- Field: or
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get_lookahead
- \- Arguments: (Len=0)
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_BRACKET_CLOSE
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=bool, value=1
- \1- ReturnExpr: LiteralExpr: type=bool, value=0
- |6- SepExpr (Consumed=2)
- |7- FileNode: (N_Statements=3)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `AccessorExpr` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=9)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'cstr mode'
- |2- DeclExpr: 'Node object'
- |3- DeclExpr: 'cstr field'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='AccessorExpr::print' Type='void' Nargs=2
- |0- AccessorExpr node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=AccessorExpr (Mode='%s')\n
- \1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: mode
- |1- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- NameExpr: 'depth'
- |2- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=|- Object:
- |3- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: object
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |4- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- NameExpr: 'depth'
- |5- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=\- Field: %s\n
- \1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: field
- \6- ReturnExpr: <void>
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='AccessorExpr::create' Type='AccessorExpr' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'AccessorExpr new'
- \- RHS: CastExpr (Target='AccessorExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(AccessorExpr)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: object
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: mode
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: field
- \- RHS: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='NameExpr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: name
- \4- ReturnExpr: NameExpr: 'new'
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='AccessorExpr::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: GroupingExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_DOT
- \- Field: or
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_COLON
- \- Field: or
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_DOUBLECOLON
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=NameExpr
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |2- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: lookahead_is_accessor
- \- Arguments: (Len=1)
- \0- NameExpr: 'eles'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \3- ReturnExpr: LiteralExpr: type=int, value=3
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='AccessorExpr::visit' Type='void' Nargs=2
- |0- AccessorExpr n
- \1- TransformerPass p
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: object
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: object
- \1- ReturnExpr: <void>
- \8- FunctionDecl:
- |- Head: FunctionDeclHead: Name='AccessorExpr::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=AccessorExpr
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'AccessorExpr'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'AccessorExpr'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'AccessorExpr'
- \- Field: match
- \- Field: set_visitor
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeVisitor')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'AccessorExpr'
- \- Field: visit
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=IdentifierExpression
- |2- SepExpr (Consumed=2)
- |8- SepExpr (Consumed=1)
- |9- FileNode: (N_Statements=3)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `AssignmentExpr` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=9)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'cstr op'
- |2- DeclExpr: 'Node lhs'
- |3- DeclExpr: 'Node rhs'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='AssignmentExpr::print' Type='void' Nargs=2
- |0- AssignmentExpr node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=AssignmentExpr (Operator='%s')\n
- \1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: op
- |1- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- NameExpr: 'depth'
- |2- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=|- LHS:
- |3- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: lhs
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |4- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- NameExpr: 'depth'
- |5- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\- RHS:
- |6- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: rhs
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- \7- ReturnExpr: <void>
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='AssignmentExpr::create' Type='AssignmentExpr' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'AssignmentExpr new'
- \- RHS: CastExpr (Target='AssignmentExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(AssignmentExpr)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: lhs
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: op
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: rhs
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \4- ReturnExpr: NameExpr: 'new'
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='AssignmentExpr::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: GroupingExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_ASSIGN
- \- Field: or
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_AUGASSIGN
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=IdentifierExpression
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |2- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: lookahead_is_accessor
- \- Arguments: (Len=1)
- \0- NameExpr: 'eles'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \3- ReturnExpr: LiteralExpr: type=int, value=3
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='AssignmentExpr::visit' Type='void' Nargs=2
- |0- AssignmentExpr n
- \1- TransformerPass p
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: rhs
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: rhs
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: lhs
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: lhs
- \2- ReturnExpr: <void>
- \8- FunctionDecl:
- |- Head: FunctionDeclHead: Name='AssignmentExpr::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=AssignmentExpr
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'AssignmentExpr'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'AssignmentExpr'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'AssignmentExpr'
- \- Field: match
- \- Field: set_visitor
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeVisitor')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'AssignmentExpr'
- \- Field: visit
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Expression
- |2- SepExpr (Consumed=1)
- |10- SepExpr (Consumed=1)
- |11- FileNode: (N_Statements=3)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `BinOpExpr` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=9)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'cstr op'
- |2- DeclExpr: 'Node lhs'
- |3- DeclExpr: 'Node rhs'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='BinOpExpr::print' Type='void' Nargs=2
- |0- BinOpExpr node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=BinOpExpr (Operator='%s')\n
- \1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: op
- |1- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- NameExpr: 'depth'
- |2- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=|- LHS:
- |3- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: lhs
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |4- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- NameExpr: 'depth'
- |5- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\- RHS:
- |6- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: rhs
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- \7- ReturnExpr: <void>
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='BinOpExpr::create' Type='BinOpExpr' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'BinOpExpr new'
- \- RHS: CastExpr (Target='BinOpExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(BinOpExpr)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: lhs
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: op
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: rhs
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \4- ReturnExpr: NameExpr: 'new'
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='BinOpExpr::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_BINOP
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |2- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: lookahead_is_accessor
- \- Arguments: (Len=1)
- \0- NameExpr: 'eles'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |3- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: lookahead_is_possibly_function
- \- Arguments: (Len=1)
- \0- NameExpr: 'eles'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \4- ReturnExpr: LiteralExpr: type=int, value=3
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='BinOpExpr::visit' Type='void' Nargs=2
- |0- BinOpExpr n
- \1- TransformerPass p
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: lhs
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: lhs
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: rhs
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: rhs
- \2- ReturnExpr: <void>
- \8- FunctionDecl:
- |- Head: FunctionDeclHead: Name='BinOpExpr::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=BinOpExpr
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'BinOpExpr'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'BinOpExpr'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'BinOpExpr'
- \- Field: match
- \- Field: set_visitor
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeVisitor')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'BinOpExpr'
- \- Field: visit
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |2- SepExpr (Consumed=2)
- |12- SepExpr (Consumed=1)
- |13- FileNode: (N_Statements=3)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `BlockBody` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=10)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'List statements'
- |2- DeclExpr: 'bool has_runoff_clause'
- |3- DeclExpr: 'Node runoff_clause'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='BlockBody::print' Type='void' Nargs=2
- |0- BlockBody node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=BlockBody: (N_Statements=%i)\n
- \1- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: statements
- \- Field: len
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: statements
- \- Field: len
- |- Body: BlockBody: (N_Statements=4)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- NameExpr: 'depth'
- |1- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=|%i-
- \1- NameExpr: 'i'
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: statements
- \- Field: get_Node
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |3- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |3- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='-')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |4- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: has_runoff_clause
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\\-- Runoff Clause:
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: runoff_clause
- \- Field: print
- \- Arguments: (Len=1)
- \0- NameExpr: 'depth'
- \5- ReturnExpr: <void>
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='BlockBody::create_direct' Type='Node' Nargs=2
- |0- Project p
- \1- List nodes
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'BlockBody new'
- \- RHS: CastExpr (Target='BlockBody')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(BlockBody)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: type_
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: type_by_name
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=BlockBody
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: statements
- \- RHS: NameExpr: 'nodes'
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: has_runoff_clause
- \- RHS: LiteralExpr: type=bool, value=0
- \4- ReturnExpr: CastExpr (Target='Node')
- \- Value: NameExpr: 'new'
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='BlockBody::create' Type='BlockBody' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'BlockBody new'
- \- RHS: CastExpr (Target='BlockBody')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(BlockBody)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int matchnum'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'BlockBody'
- \- Field: match
- \- Arguments: (Len=1)
- \0- NameExpr: 'eles'
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'matchnum'
- \- RHS: LiteralExpr: type=int, value=2
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=5)
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: GroupingExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=BlockBody
- \- Field: or
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=IfExpr
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'shoc'
- \- Field: bail_out
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=BlockBody matched against thing of len 2 of which [1] was a node but not a BlockBody
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=IfExpr
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='IfExpr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_elif
- |- Body: BlockBody: (N_Statements=5)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: has_runoff_clause
- \- RHS: LiteralExpr: type=bool, value=0
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: runoff_clause
- \- RHS: CastExpr (Target='Node')
- \- Value: LiteralExpr: type=ptr, value=0
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: statements
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- |3- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: statements
- \- Field: append_Node
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- |4- ReturnExpr: NameExpr: 'new'
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: statements
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: has_runoff_clause
- \- RHS: LiteralExpr: type=bool, value=1
- |4- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: runoff_clause
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \-- Runoff Clause: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: statements
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: has_runoff_clause
- \- RHS: LiteralExpr: type=bool, value=0
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: runoff_clause
- \- RHS: CastExpr (Target='Node')
- \- Value: LiteralExpr: type=ptr, value=0
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'matchnum'
- \- RHS: LiteralExpr: type=int, value=3
- |- Body: BlockBody: (N_Statements=5)
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'BlockBody old'
- \- RHS: CastExpr (Target='BlockBody')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: has_runoff_clause
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'old'
- \- Field: has_runoff_clause
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: runoff_clause
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'old'
- \- Field: runoff_clause
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: statements
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'old'
- \- Field: statements
- |4- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: statements
- \- Field: insert
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=int, value=0
- \1- CastExpr (Target='ptr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \-- Runoff Clause: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: has_runoff_clause
- \- RHS: LiteralExpr: type=bool, value=1
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: runoff_clause
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: n
- \- Arguments: (Len=0)
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: statements
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- \3- ReturnExpr: NameExpr: 'new'
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='BlockBody::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=SepExpr
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |2- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_DONE
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=2
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='>')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: in_slice
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=2
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ELSE
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_DO
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=4
- \-- Runoff Clause: IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=BlockBody
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=2
- \-- Runoff Clause: IfExpr:
- |- Condition: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=IfExpr
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='IfExpr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_elif
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=2
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='>')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: in_slice
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=2
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Expression
- \- RHS: GroupingExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=BlockBody
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=3
- \3- ReturnExpr: LiteralExpr: type=int, value=0
- |8- FunctionDecl:
- |- Head: FunctionDeclHead: Name='BlockBody::visit' Type='void' Nargs=2
- |0- BlockBody n
- \1- TransformerPass p
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- DeclExpr: 'Node res'
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: statements
- \- Field: len
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'res'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: statements
- \- Field: get_Node
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: CastExpr (Target='ptr')
- \- Value: NameExpr: 'res'
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: statements
- \- Field: del
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: statements
- \- Field: set
- \- Arguments: (Len=2)
- |0- NameExpr: 'i'
- \1- CastExpr (Target='ptr')
- \- Value: NameExpr: 'res'
- |2- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |3- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: has_runoff_clause
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'Node runoff'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: runoff_clause
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: CastExpr (Target='ptr')
- \- Value: NameExpr: 'runoff'
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: has_runoff_clause
- \- RHS: LiteralExpr: type=bool, value=0
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: runoff_clause
- \- RHS: NameExpr: 'runoff'
- \4- ReturnExpr: <void>
- \9- FunctionDecl:
- |- Head: FunctionDeclHead: Name='BlockBody::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=BlockBody
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'BlockBody'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'BlockBody'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'BlockBody'
- \- Field: match
- \- Field: set_visitor
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeVisitor')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'BlockBody'
- \- Field: visit
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Expression
- |2- SepExpr (Consumed=2)
- |14- SepExpr (Consumed=1)
- |15- FileNode: (N_Statements=3)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `CallExpr` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=8)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'Node meth'
- |2- DeclExpr: 'List args'
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='CallExpr::print' Type='void' Nargs=2
- |0- CallExpr node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=CallExpr:\n
- |1- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- NameExpr: 'depth'
- |2- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=|- Method:
- |3- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: meth
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |4- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- NameExpr: 'depth'
- |5- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=\- Arguments: (Len=%i)\n
- \1- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: len
- |6- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |7- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: len
- |- Body: BlockBody: (N_Statements=4)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'i'
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=\\%i-
- \1- NameExpr: 'i'
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=|%i-
- \1- NameExpr: 'i'
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: get_Node
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=2
- |3- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \8- ReturnExpr: <void>
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='CallExpr::create' Type='CallExpr' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'CallExpr new'
- \- RHS: CastExpr (Target='CallExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(CallExpr)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: meth
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- |2- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'Node args'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- |3- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'args'
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ZeroTuple
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- \-- Runoff Clause: IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'args'
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=OneTuple
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- Field: append_Node
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='OneTuple')
- \- Value: NameExpr: 'args'
- \- Field: element
- \-- Runoff Clause: IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'args'
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=GroupingExpr
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- Field: append_Node
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='GroupingExpr')
- \- Value: NameExpr: 'args'
- \- Field: contents
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- RHS: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='Tuple')
- \- Value: NameExpr: 'args'
- \- Field: elements
- \4- ReturnExpr: NameExpr: 'new'
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='CallExpr::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Tuple
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |2- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: lookahead_is_accessor
- \- Arguments: (Len=1)
- \0- NameExpr: 'eles'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \3- ReturnExpr: LiteralExpr: type=int, value=2
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='CallExpr::visit' Type='void' Nargs=2
- |0- CallExpr n
- \1- TransformerPass p
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: meth
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: meth
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |2- DeclExpr: 'Node res'
- |3- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: args
- \- Field: len
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'res'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: args
- \- Field: get_Node
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: CastExpr (Target='ptr')
- \- Value: NameExpr: 'res'
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: args
- \- Field: set
- \- Arguments: (Len=2)
- |0- NameExpr: 'i'
- \1- CastExpr (Target='ptr')
- \- Value: NameExpr: 'res'
- |2- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \4- ReturnExpr: <void>
- \7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='CallExpr::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=CallExpr
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'CallExpr'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'CallExpr'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'CallExpr'
- \- Field: match
- \- Field: set_visitor
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeVisitor')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'CallExpr'
- \- Field: visit
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: matches_only_nodes
- \- Arguments: (Len=0)
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |2- SepExpr (Consumed=2)
- |16- SepExpr (Consumed=1)
- |17- FileNode: (N_Statements=3)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `CastExpr` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=8)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'Node value'
- |2- DeclExpr: 'cstr target'
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='CastExpr::print' Type='void' Nargs=2
- |0- CastExpr node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=CastExpr (Target='%s')\n
- \1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: target
- |1- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- NameExpr: 'depth'
- |2- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\- Value:
- |3- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: value
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- \4- ReturnExpr: <void>
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='CastExpr::create' Type='CastExpr' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'CastExpr new'
- \- RHS: CastExpr (Target='CastExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(CastExpr)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: target
- \- RHS: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='NameExpr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: name
- \3- ReturnExpr: NameExpr: 'new'
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='CastExpr::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_CAST
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=NameExpr
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |2- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: lookahead_is_accessor
- \- Arguments: (Len=1)
- \0- NameExpr: 'eles'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |3- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: lookahead_is_possibly_function
- \- Arguments: (Len=1)
- \0- NameExpr: 'eles'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |4- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get_lookahead
- \- Arguments: (Len=0)
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get_lookahead
- \- Arguments: (Len=0)
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_CAST
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \5- ReturnExpr: LiteralExpr: type=int, value=3
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='CastExpr::visit' Type='void' Nargs=2
- |0- CastExpr n
- \1- TransformerPass p
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: value
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: value
- \1- ReturnExpr: <void>
- \7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='CastExpr::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=CastExpr
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'CastExpr'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'CastExpr'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'CastExpr'
- \- Field: match
- \- Field: set_visitor
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeVisitor')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'CastExpr'
- \- Field: visit
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |2- SepExpr (Consumed=2)
- |18- SepExpr (Consumed=1)
- |19- FileNode: (N_Statements=7)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `FunctionDeclHead` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=8)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'List args'
- |2- DeclExpr: 'cstr name'
- |3- DeclExpr: 'cstr ret_type'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FunctionDeclHead::print' Type='void' Nargs=2
- |0- FunctionDeclHead node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=4)
- |0- LiteralExpr: type=cstr, value=FunctionDeclHead: Name='%s' Type='%s' Nargs=%i\n
- |1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: name
- |2- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: ret_type
- \3- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: len
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: len
- |- Body: BlockBody: (N_Statements=3)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'i'
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=\\%i- %s\n
- |1- NameExpr: 'i'
- \2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=|%i- %s\n
- |1- NameExpr: 'i'
- \2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- |2- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: <void>
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FunctionDeclHead::create' Type='FunctionDeclHead' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'FunctionDeclHead new'
- \- RHS: CastExpr (Target='FunctionDeclHead')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(FunctionDeclHead)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: name
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: ret_type
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=4
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- |3- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'Node args'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- |4- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'args'
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ZeroArgList
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- \-- Runoff Clause: IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'args'
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=OneArgList
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- Field: append
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='OneArgList')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: text
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- RHS: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='MultiArgList')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: args
- \5- ReturnExpr: NameExpr: 'new'
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FunctionDeclHead::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=4
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=5
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_FUNCTIONDECL
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ArgList
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_FUNCTIONDECL_NAME
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_FUNCTIONDECL_RETURN
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=4
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_FUNCTIONDECL_RETURN_TY
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=5
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_FUNCTIONDECL_DOES
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \2- ReturnExpr: LiteralExpr: type=int, value=6
- \7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FunctionDeclHead::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=FunctionDeclHead
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'FunctionDeclHead'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'FunctionDeclHead'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'FunctionDeclHead'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=6
- |2- SepExpr (Consumed=2)
- |3- TypeDecl:
- |- Head: TypeDeclHead: `FunctionBody` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=6)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'List statements'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FunctionBody::print' Type='void' Nargs=2
- |0- FunctionBody node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=FunctionBody: (N_Statements=%i)\n
- \1- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: statements
- \- Field: len
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: statements
- \- Field: len
- |- Body: BlockBody: (N_Statements=3)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'i'
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: statements
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=\\%i-
- \1- NameExpr: 'i'
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: statements
- \- Field: get_Node
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=2
- \-- Runoff Clause: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=|%i-
- \1- NameExpr: 'i'
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: statements
- \- Field: get_Node
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=2
- |2- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: <void>
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FunctionBody::create' Type='FunctionBody' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'FunctionBody new'
- \- RHS: CastExpr (Target='FunctionBody')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(FunctionBody)@'
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='>')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: in_slice
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=2
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Expression
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=FunctionBody
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: statements
- \- RHS: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='FunctionBody')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: statements
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: statements
- \- Field: insert
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=int, value=0
- \1- CastExpr (Target='ptr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- |2- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ReturnExpr
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: statements
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: statements
- \- Field: append_Node
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \3- ReturnExpr: NameExpr: 'new'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FunctionBody::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: GroupingExpr: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=SepExpr
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |2- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |3- IfExpr:
- |- Condition: BinOpExpr (Operator='>')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: in_slice
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=2
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Expression
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=FunctionBody
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=IfExpr
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='IfExpr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_elif
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- ReturnExpr: LiteralExpr: type=int, value=3
- |4- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ReturnExpr
- |- Body: BlockBody: (N_Statements=4)
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- DeclExpr: 'Element e'
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: in_slice
- \- Arguments: (Len=0)
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'e'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- |1- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'e'
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'e'
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=FunctionBody
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |2- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |3- ReturnExpr: LiteralExpr: type=int, value=2
- \5- ReturnExpr: LiteralExpr: type=int, value=0
- \5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FunctionBody::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=FunctionBody
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'FunctionBody'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'FunctionBody'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'FunctionBody'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- |4- SepExpr (Consumed=2)
- |5- TypeDecl:
- |- Head: TypeDeclHead: `FunctionDecl` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=8)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'FunctionDeclHead head'
- |2- DeclExpr: 'List body'
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FunctionDecl::print' Type='void' Nargs=2
- |0- FunctionDecl node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=FunctionDecl:\n
- |1- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |2- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=|- Head:
- |3- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: CastExpr (Target='Node')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: head
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |4- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |5- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: body
- \- Field: len
- |- Body: BlockBody: (N_Statements=3)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'i'
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: body
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=\\%i-
- \1- NameExpr: 'i'
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: body
- \- Field: get_Node
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=2
- \-- Runoff Clause: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=|%i-
- \1- NameExpr: 'i'
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: body
- \- Field: get_Node
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=2
- |2- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \6- ReturnExpr: <void>
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FunctionDecl::create' Type='FunctionDecl' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'FunctionDecl new'
- \- RHS: CastExpr (Target='FunctionDecl')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(FunctionDecl)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: head
- \- RHS: CastExpr (Target='FunctionDeclHead')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: body
- \- RHS: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='FunctionBody')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: statements
- \3- ReturnExpr: NameExpr: 'new'
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FunctionDecl::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=FunctionDeclHead
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=FunctionBody
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \1- ReturnExpr: LiteralExpr: type=int, value=2
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FunctionDecl::visit' Type='void' Nargs=2
- |0- FunctionDecl n
- \1- TransformerPass p
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- DeclExpr: 'Node res'
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: body
- \- Field: len
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'res'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: body
- \- Field: get_Node
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: CastExpr (Target='ptr')
- \- Value: NameExpr: 'res'
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: body
- \- Field: del
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: body
- \- Field: set
- \- Arguments: (Len=2)
- |0- NameExpr: 'i'
- \1- CastExpr (Target='ptr')
- \- Value: NameExpr: 'res'
- |2- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: <void>
- \7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FunctionDecl::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=FunctionDecl
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'FunctionDecl'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'FunctionDecl'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'FunctionDecl'
- \- Field: match
- \- Field: set_visitor
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeVisitor')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'FunctionDecl'
- \- Field: visit
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: matches_only_nodes
- \- Arguments: (Len=0)
- |6- SepExpr (Consumed=2)
- |20- SepExpr (Consumed=1)
- |21- FileNode: (N_Statements=11)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `ZeroArgList` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=5)
- |0- DeclExpr: 'NodeType type_'
- |1- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ZeroArgList::print' Type='void' Nargs=2
- |0- ZeroArgList node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ZeroArgList: (Size=0)\n
- \1- ReturnExpr: <void>
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ZeroArgList::create' Type='ZeroArgList' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'ZeroArgList new'
- \- RHS: CastExpr (Target='ZeroArgList')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(ZeroArgList)@'
- \1- ReturnExpr: NameExpr: 'new'
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ZeroArgList::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ARGLIST_START
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ARGLIST_END
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \1- ReturnExpr: LiteralExpr: type=int, value=2
- \4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ZeroArgList::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ZeroArgList
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'ZeroArgList'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'ZeroArgList'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'ZeroArgList'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: matches_only_tokens
- \- Arguments: (Len=0)
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ArgList
- |2- SepExpr (Consumed=2)
- |3- TypeDecl:
- |- Head: TypeDeclHead: `OneArgList` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=6)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'cstr text'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='OneArgList::print' Type='void' Nargs=2
- |0- OneArgList node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=OneArgList: (Size=1)\n
- |1- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |2- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=\\0- %s\n
- \1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: text
- \3- ReturnExpr: <void>
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='OneArgList::create' Type='OneArgList' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'OneArgList new'
- \- RHS: CastExpr (Target='OneArgList')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(OneArgList)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: text
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- \2- ReturnExpr: NameExpr: 'new'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='OneArgList::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ARGLIST_START
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ARGLIST_ELE
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ARGLIST_END
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \1- ReturnExpr: LiteralExpr: type=int, value=3
- \5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='OneArgList::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=OneArgList
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'OneArgList'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'OneArgList'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'OneArgList'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: matches_only_tokens
- \- Arguments: (Len=0)
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ArgList
- |4- SepExpr (Consumed=2)
- |5- TypeDecl:
- |- Head: TypeDeclHead: `MultiArgListStart` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=6)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'cstr text'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='MultiArgListStart::print' Type='void' Nargs=2
- |0- MultiArgListStart node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=MultiArgListStart: (Size=1)\n
- |1- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |2- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=\\0- %s\n
- \1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: text
- \3- ReturnExpr: <void>
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='MultiArgListStart::create' Type='MultiArgListStart' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'MultiArgListStart new'
- \- RHS: CastExpr (Target='MultiArgListStart')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(MultiArgListStart)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: text
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- \2- ReturnExpr: NameExpr: 'new'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='MultiArgListStart::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ARGLIST_SEP
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ARGLIST_ELE
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ARGLIST_END
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \1- ReturnExpr: LiteralExpr: type=int, value=3
- \5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='MultiArgListStart::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=MultiArgListStart
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'MultiArgListStart'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'MultiArgListStart'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'MultiArgListStart'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: matches_only_tokens
- \- Arguments: (Len=0)
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=MultiArgListFragment
- |6- SepExpr (Consumed=2)
- |7- TypeDecl:
- |- Head: TypeDeclHead: `MultiArgListExt` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=6)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'List args'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='MultiArgListExt::print' Type='void' Nargs=2
- |0- MultiArgListExt node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=MultiArgListExt: (Size=%i)\n
- \1- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: len
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: len
- |- Body: BlockBody: (N_Statements=3)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'i'
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=\\%i- %s\n
- |1- NameExpr: 'i'
- \2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=|%i- %s\n
- |1- NameExpr: 'i'
- \2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- |2- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: <void>
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='MultiArgListExt::create' Type='MultiArgListExt' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'MultiArgListExt new'
- \- RHS: CastExpr (Target='MultiArgListExt')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(MultiArgListExt)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'Node ele'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- |2- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'ele'
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=MultiArgListStart
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- Field: append
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- Field: append
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='MultiArgListStart')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: text
- \-- Runoff Clause: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- RHS: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='MultiArgListExt')
- \- Value: NameExpr: 'ele'
- \- Field: args
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- Field: insert
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=int, value=0
- \1- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- \3- ReturnExpr: NameExpr: 'new'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='MultiArgListExt::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ARGLIST_SEP
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ARGLIST_ELE
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=MultiArgListFragment
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \2- ReturnExpr: LiteralExpr: type=int, value=3
- \5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='MultiArgListExt::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=MultiArgListExt
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'MultiArgListExt'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'MultiArgListExt'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'MultiArgListExt'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=MultiArgListFragment
- |8- SepExpr (Consumed=2)
- |9- TypeDecl:
- |- Head: TypeDeclHead: `MultiArgList` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=6)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'List args'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='MultiArgList::print' Type='void' Nargs=2
- |0- MultiArgList node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=MultiArgList: (Size=%i)\n
- \1- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: len
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: len
- |- Body: BlockBody: (N_Statements=3)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'i'
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=\\%i- %s\n
- |1- NameExpr: 'i'
- \2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=|%i- %s\n
- |1- NameExpr: 'i'
- \2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: args
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- |2- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: <void>
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='MultiArgList::create' Type='MultiArgList' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'MultiArgList new'
- \- RHS: CastExpr (Target='MultiArgList')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(MultiArgList)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'Node ele'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- |2- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'ele'
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=MultiArgListStart
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- Field: append
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- Field: append
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='MultiArgListStart')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: text
- \-- Runoff Clause: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- RHS: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='MultiArgList')
- \- Value: NameExpr: 'ele'
- \- Field: args
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: args
- \- Field: insert
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=int, value=0
- \1- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- \3- ReturnExpr: NameExpr: 'new'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='MultiArgList::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ARGLIST_START
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ARGLIST_ELE
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=MultiArgListFragment
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \2- ReturnExpr: LiteralExpr: type=int, value=3
- \5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='MultiArgList::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=MultiArgList
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'MultiArgList'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'MultiArgList'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'MultiArgList'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ArgList
- |10- SepExpr (Consumed=2)
- |22- SepExpr (Consumed=1)
- |23- FileNode: (N_Statements=3)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `GroupingExpr` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=7)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'Node contents'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='GroupingExpr::print' Type='void' Nargs=2
- |0- GroupingExpr node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=GroupingExpr:
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: contents
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- \2- ReturnExpr: <void>
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='GroupingExpr::create' Type='GroupingExpr' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'GroupingExpr new'
- \- RHS: CastExpr (Target='GroupingExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(GroupingExpr)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: contents
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \2- ReturnExpr: NameExpr: 'new'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='GroupingExpr::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_PAREN_OPEN
- \- Field: or
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_PAREN_CLOSE
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |2- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: lookahead_is_possibly_function
- \- Arguments: (Len=1)
- \0- NameExpr: 'eles'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \3- ReturnExpr: LiteralExpr: type=int, value=3
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='GroupingExpr::visit' Type='void' Nargs=2
- |0- GroupingExpr n
- \1- TransformerPass p
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: contents
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: contents
- \1- ReturnExpr: <void>
- \6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='GroupingExpr::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=GroupingExpr
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'GroupingExpr'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'GroupingExpr'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'GroupingExpr'
- \- Field: match
- \- Field: set_visitor
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeVisitor')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'GroupingExpr'
- \- Field: visit
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Tuple
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |2- SepExpr (Consumed=2)
- |24- SepExpr (Consumed=1)
- |25- FileNode: (N_Statements=5)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `IfExprHead` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=7)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'Node condition'
- |2- DeclExpr: 'bool is_elif'
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='IfExprHead::print' Type='void' Nargs=2
- |0- IfExprHead node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=IfExprHead: Is_Elif:%i, Condition=
- \1- CastExpr (Target='int')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: is_elif
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: condition
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- \2- ReturnExpr: <void>
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='IfExprHead::create' Type='IfExprHead' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'IfExprHead new'
- \- RHS: CastExpr (Target='IfExprHead')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(IfExprHead)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: condition
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: is_elif
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ELIF
- \3- ReturnExpr: NameExpr: 'new'
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='IfExprHead::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_IF
- \- Field: or
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_ELIF
- \- Field: or
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_DO
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \2- ReturnExpr: LiteralExpr: type=int, value=3
- \6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='IfExprHead::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=IfExprHead
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'IfExprHead'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'IfExprHead'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'IfExprHead'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- |2- SepExpr (Consumed=2)
- |3- TypeDecl:
- |- Head: TypeDeclHead: `IfExpr` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=9)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'Node condition'
- |2- DeclExpr: 'bool is_elif'
- |3- DeclExpr: 'BlockBody body'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='IfExpr::print' Type='void' Nargs=2
- |0- IfExpr node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=IfExpr:\n
- |1- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |2- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=|- Condition:
- |3- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: CastExpr (Target='Node')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: condition
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=2
- |4- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |5- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=|- Body:
- |6- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: CastExpr (Target='Node')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: body
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=2
- \7- ReturnExpr: <void>
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='IfExpr::create' Type='IfExpr' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'IfExpr new'
- \- RHS: CastExpr (Target='IfExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(IfExpr)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: condition
- \- RHS: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='IfExprHead')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: condition
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: is_elif
- \- RHS: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='IfExprHead')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_elif
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: body
- \- RHS: CastExpr (Target='BlockBody')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \4- ReturnExpr: NameExpr: 'new'
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='IfExpr::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=IfExprHead
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=BlockBody
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \1- ReturnExpr: LiteralExpr: type=int, value=2
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='IfExpr::visit' Type='void' Nargs=2
- |0- IfExpr n
- \1- TransformerPass p
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: condition
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: condition
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: body
- \- RHS: CastExpr (Target='BlockBody')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- CastExpr (Target='Node')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: body
- \2- ReturnExpr: <void>
- \8- FunctionDecl:
- |- Head: FunctionDeclHead: Name='IfExpr::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=IfExpr
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'IfExpr'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'IfExpr'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'IfExpr'
- \- Field: match
- \- Field: set_visitor
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeVisitor')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'IfExpr'
- \- Field: visit
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: matches_only_nodes
- \- Arguments: (Len=0)
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Expression
- |4- SepExpr (Consumed=2)
- |26- SepExpr (Consumed=1)
- |27- FileNode: (N_Statements=3)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `ImportStmt` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=6)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'cstr name'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ImportStmt::print' Type='void' Nargs=2
- |0- ImportStmt node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=ImportStmt: '%s'\n
- \1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: name
- \1- ReturnExpr: <void>
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ImportStmt::create' Type='ImportStmt' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'ImportStmt new'
- \- RHS: CastExpr (Target='ImportStmt')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(ImportStmt)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: name
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- \2- ReturnExpr: NameExpr: 'new'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ImportStmt::match' Type='int' Nargs=1
- \0- EleList eles
- \0- ReturnExpr: CastExpr (Target='int')
- \- Value: GroupingExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_IMPORT
- \5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ImportStmt::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ImportStmt
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'ImportStmt'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'ImportStmt'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'ImportStmt'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: matches_only_tokens
- \- Arguments: (Len=0)
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |2- SepExpr (Consumed=70)
- |28- SepExpr (Consumed=1)
- |29- FileNode: (N_Statements=3)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `IndexExpr` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=8)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'Node value'
- |2- DeclExpr: 'Node array'
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='IndexExpr::print' Type='void' Nargs=2
- |0- IndexExpr node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=IndexExpr\n
- |1- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- NameExpr: 'depth'
- |2- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=|- Array:
- |3- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: array
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |4- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- NameExpr: 'depth'
- |5- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\\- Value:
- |6- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: value
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- \7- ReturnExpr: <void>
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='IndexExpr::create' Type='IndexExpr' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'IndexExpr new'
- \- RHS: CastExpr (Target='IndexExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(IndexExpr)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: array
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \3- ReturnExpr: NameExpr: 'new'
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='IndexExpr::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_BRACKET_OPEN
- \- Field: or
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_BRACKET_CLOSE
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |2- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: lookahead_is_accessor
- \- Arguments: (Len=1)
- \0- NameExpr: 'eles'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |3- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: lookahead_is_possibly_function
- \- Arguments: (Len=1)
- \0- NameExpr: 'eles'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \4- ReturnExpr: LiteralExpr: type=int, value=4
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='IndexExpr::visit' Type='void' Nargs=2
- |0- IndexExpr n
- \1- TransformerPass p
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: value
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: value
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: array
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: array
- \2- ReturnExpr: <void>
- \7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='IndexExpr::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=IndexExpr
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'IndexExpr'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'IndexExpr'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'IndexExpr'
- \- Field: match
- \- Field: set_visitor
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeVisitor')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'IndexExpr'
- \- Field: visit
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=4
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=IdentifierExpression
- |2- SepExpr (Consumed=2)
- |30- SepExpr (Consumed=1)
- |31- FileNode: (N_Statements=3)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `IntrinsicExpr` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=6)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'cstr name'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='IntrinsicExpr::print' Type='void' Nargs=2
- |0- IntrinsicExpr node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=IntrinsicExpr: '%s'\n
- \1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: name
- \1- ReturnExpr: <void>
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='IntrinsicExpr::create' Type='IntrinsicExpr' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'IntrinsicExpr new'
- \- RHS: CastExpr (Target='IntrinsicExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(IntrinsicExpr)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: name
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- \2- ReturnExpr: NameExpr: 'new'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='IntrinsicExpr::match' Type='int' Nargs=1
- \0- EleList eles
- \0- ReturnExpr: CastExpr (Target='int')
- \- Value: GroupingExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_INTRINSIC
- \5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='IntrinsicExpr::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=IntrinsicExpr
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'IntrinsicExpr'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'IntrinsicExpr'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'IntrinsicExpr'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: matches_only_tokens
- \- Arguments: (Len=0)
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |2- SepExpr (Consumed=2)
- |32- SepExpr (Consumed=1)
- |33- FileNode: (N_Statements=3)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `LiteralExpr` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=11)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'cstr value'
- |2- DeclExpr: 'cstr value_type'
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='LiteralExpr::print' Type='void' Nargs=2
- |0- LiteralExpr node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=LiteralExpr: type=%s, value=%s\n
- |1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: value_type
- \2- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: value
- \1- ReturnExpr: <void>
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='LiteralExpr::create' Type='LiteralExpr' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'LiteralExpr new'
- \- RHS: CastExpr (Target='LiteralExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(LiteralExpr)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_INT_LITERAL
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value_type
- \- RHS: LiteralExpr: type=cstr, value=int
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_FLOAT_LITERAL
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value_type
- \- RHS: LiteralExpr: type=cstr, value=float
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_NULL_LITERAL
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value_type
- \- RHS: LiteralExpr: type=cstr, value=ptr
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value
- \- RHS: LiteralExpr: type=cstr, value=0
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_BOOL_LITERAL
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value_type
- \- RHS: LiteralExpr: type=cstr, value=bool
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- \- RHS: LiteralExpr: type=cstr, value=true
- \- Field: str
- \- Arguments: (Len=0)
- \-- Runoff Clause: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value_type
- \- RHS: LiteralExpr: type=cstr, value=cstr
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value
- \- Field: substr
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=int, value=1
- \1- BinOpExpr (Operator='-')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value
- \- Field: len
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=2
- \3- ReturnExpr: NameExpr: 'new'
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='LiteralExpr::create_direct' Type='Node' Nargs=3
- |0- Project p
- |1- cstr value_type
- \2- cstr value
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'LiteralExpr new'
- \- RHS: CastExpr (Target='LiteralExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(LiteralExpr)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value
- \- RHS: NameExpr: 'value'
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value_type
- \- RHS: NameExpr: 'value_type'
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: type_
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: type_by_name
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=LiteralExpr
- \4- ReturnExpr: CastExpr (Target='Node')
- \- Value: NameExpr: 'new'
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='LiteralExpr::create_direct_int' Type='Node' Nargs=2
- |0- Project p
- \1- int value
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'LiteralExpr'
- \- Field: create_direct
- \- Arguments: (Len=3)
- |0- NameExpr: 'p'
- |1- LiteralExpr: type=cstr, value=int
- \2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'value'
- \- Field: str
- \- Arguments: (Len=0)
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='LiteralExpr::create_direct_bool' Type='Node' Nargs=2
- |0- Project p
- \1- bool value
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'LiteralExpr'
- \- Field: create_direct
- \- Arguments: (Len=3)
- |0- NameExpr: 'p'
- |1- LiteralExpr: type=cstr, value=bool
- \2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'value'
- \- Field: str
- \- Arguments: (Len=0)
- |8- FunctionDecl:
- |- Head: FunctionDeclHead: Name='LiteralExpr::create_direct_float' Type='Node' Nargs=2
- |0- Project p
- \1- float value
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'LiteralExpr'
- \- Field: create_direct
- \- Arguments: (Len=3)
- |0- NameExpr: 'p'
- |1- LiteralExpr: type=cstr, value=float
- \2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'value'
- \- Field: str
- \- Arguments: (Len=0)
- |9- FunctionDecl:
- |- Head: FunctionDeclHead: Name='LiteralExpr::match' Type='int' Nargs=1
- \0- EleList eles
- \0- ReturnExpr: CastExpr (Target='int')
- \- Value: GroupingExpr: BinOpExpr (Operator='+')
- |- LHS: GroupingExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_INT_LITERAL
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: GroupingExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_FLOAT_LITERAL
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: GroupingExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_BOOL_LITERAL
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: GroupingExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_NULL_LITERAL
- \- RHS: GroupingExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_STRING_LITERAL
- \10- FunctionDecl:
- |- Head: FunctionDeclHead: Name='LiteralExpr::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=LiteralExpr
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'LiteralExpr'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'LiteralExpr'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'LiteralExpr'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: matches_only_tokens
- \- Arguments: (Len=0)
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |2- SepExpr (Consumed=2)
- |34- SepExpr (Consumed=1)
- |35- FileNode: (N_Statements=5)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `NameExpr` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=7)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'cstr name'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NameExpr::print' Type='void' Nargs=2
- |0- NameExpr node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=NameExpr: '%s'\n
- \1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: name
- \1- ReturnExpr: <void>
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NameExpr::create' Type='NameExpr' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'NameExpr new'
- \- RHS: CastExpr (Target='NameExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(NameExpr)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: name
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- \2- ReturnExpr: NameExpr: 'new'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NameExpr::create_direct' Type='NameExpr' Nargs=2
- |0- Project p
- \1- cstr name
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'NameExpr new'
- \- RHS: CastExpr (Target='NameExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(NameExpr)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: type_
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: type_by_name
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=NameExpr
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: name
- \- RHS: NameExpr: 'name'
- \3- ReturnExpr: NameExpr: 'new'
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NameExpr::match' Type='int' Nargs=1
- \0- EleList eles
- \0- ReturnExpr: CastExpr (Target='int')
- \- Value: GroupingExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_NAME
- \6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='NameExpr::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=NameExpr
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NameExpr'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NameExpr'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NameExpr'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: matches_only_tokens
- \- Arguments: (Len=0)
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=IdentifierExpression
- |2- SepExpr (Consumed=2)
- |3- TypeDecl:
- |- Head: TypeDeclHead: `DeclExpr` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=6)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'cstr name'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='DeclExpr::print' Type='void' Nargs=2
- |0- DeclExpr node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=DeclExpr: '%s'\n
- \1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: name
- \1- ReturnExpr: <void>
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='DeclExpr::create' Type='DeclExpr' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'DeclExpr new'
- \- RHS: CastExpr (Target='DeclExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(DeclExpr)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: name
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- \2- ReturnExpr: NameExpr: 'new'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='DeclExpr::match' Type='int' Nargs=1
- \0- EleList eles
- \0- ReturnExpr: CastExpr (Target='int')
- \- Value: GroupingExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_VAR_DECL
- \5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='DeclExpr::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=DeclExpr
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'DeclExpr'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'DeclExpr'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'DeclExpr'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: matches_only_tokens
- \- Arguments: (Len=0)
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=IdentifierExpression
- |4- SepExpr (Consumed=2)
- |36- SepExpr (Consumed=1)
- |37- FileNode: (N_Statements=3)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `ReturnExpr` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=8)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'bool is_void'
- |2- DeclExpr: 'Node value'
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ReturnExpr::print' Type='void' Nargs=2
- |0- ReturnExpr node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ReturnExpr:
- |1- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: is_void
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=<void>\n
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: value
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- \2- ReturnExpr: <void>
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ReturnExpr::create' Type='ReturnExpr' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'ReturnExpr new'
- \- RHS: CastExpr (Target='ReturnExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(ReturnExpr)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: is_void
- \- RHS: LiteralExpr: type=bool, value=1
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='>')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: in_slice
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: is_void
- \- RHS: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |3- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: is_void
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \4- ReturnExpr: NameExpr: 'new'
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ReturnExpr::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: GroupingExpr: BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_RETURN
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='>')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: in_slice
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=2
- \3- ReturnExpr: LiteralExpr: type=int, value=1
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ReturnExpr::visit' Type='void' Nargs=2
- |0- ReturnExpr n
- \1- TransformerPass p
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: is_void
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: value
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: value
- \1- ReturnExpr: <void>
- \7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ReturnExpr::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ReturnExpr
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'ReturnExpr'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'ReturnExpr'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'ReturnExpr'
- \- Field: match
- \- Field: set_visitor
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeVisitor')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'ReturnExpr'
- \- Field: visit
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Expression
- |2- SepExpr (Consumed=2)
- |38- SepExpr (Consumed=1)
- |39- FileNode: (N_Statements=3)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `SepExpr` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=6)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'int consumed'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='SepExpr::print' Type='void' Nargs=2
- |0- SepExpr node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=SepExpr (Consumed=%i)\n
- \1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: consumed
- \1- ReturnExpr: <void>
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='SepExpr::create' Type='SepExpr' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'SepExpr new'
- \- RHS: CastExpr (Target='SepExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(SepExpr)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: consumed
- \- RHS: LiteralExpr: type=int, value=1
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='>')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: in_slice
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ENDOFSTATEMENT
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=SepExpr
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: consumed
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='SepExpr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: consumed
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: NameExpr: 'new'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='SepExpr::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='>')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: in_slice
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ENDOFSTATEMENT
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=SepExpr
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=2
- |1- IfExpr:
- |- Condition: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |2- IfExpr:
- |- Condition: GroupingExpr: BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_ENDOFSTATEMENT
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |3- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: has_lookahead
- \- Arguments: (Len=0)
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get_lookahead
- \- Arguments: (Len=0)
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get_lookahead
- \- Arguments: (Len=0)
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_ENDOFSTATEMENT
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \4- ReturnExpr: LiteralExpr: type=int, value=1
- \5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='SepExpr::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=SepExpr
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'SepExpr'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'SepExpr'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'SepExpr'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Expression
- |2- SepExpr (Consumed=2)
- |40- SepExpr (Consumed=1)
- |41- FileNode: (N_Statements=11)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `TupleEndFragment` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=6)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'Node element'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TupleEndFragment::print' Type='void' Nargs=2
- |0- TupleEndFragment node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=TupleEndFragment, element=
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: element
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- \2- ReturnExpr: <void>
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TupleEndFragment::create' Type='TupleEndFragment' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'TupleEndFragment new'
- \- RHS: CastExpr (Target='TupleEndFragment')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(TupleEndFragment)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: element
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \2- ReturnExpr: NameExpr: 'new'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TupleEndFragment::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_COMMA
- \- Field: or
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_PAREN_CLOSE
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \2- ReturnExpr: LiteralExpr: type=int, value=3
- \5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TupleEndFragment::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=TupleEndFragment
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TupleEndFragment'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TupleEndFragment'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TupleEndFragment'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=TupleFragment
- |2- SepExpr (Consumed=2)
- |3- TypeDecl:
- |- Head: TypeDeclHead: `TupleMidFragment` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=6)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'List elements'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TupleMidFragment::print' Type='void' Nargs=2
- |0- TupleMidFragment node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=TupleMidFragment: (Length=%i)\n
- \1- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: elements
- \- Field: len
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: elements
- \- Field: len
- |- Body: BlockBody: (N_Statements=4)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- NameExpr: 'depth'
- |1- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=|%i-
- \1- NameExpr: 'i'
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: elements
- \- Field: get_Node
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |3- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: <void>
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TupleMidFragment::create' Type='TupleMidFragment' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'TupleMidFragment new'
- \- RHS: CastExpr (Target='TupleMidFragment')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(TupleMidFragment)@'
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=TupleEndFragment
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: elements
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: elements
- \- Field: append_Node
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: elements
- \- Field: append_Node
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='TupleEndFragment')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: element
- \-- Runoff Clause: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: elements
- \- RHS: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='TupleMidFragment')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: elements
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: elements
- \- Field: insert
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=int, value=0
- \1- CastExpr (Target='ptr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \2- ReturnExpr: NameExpr: 'new'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TupleMidFragment::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_COMMA
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=TupleFragment
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \2- ReturnExpr: LiteralExpr: type=int, value=3
- \5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TupleMidFragment::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=TupleMidFragment
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TupleMidFragment'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TupleMidFragment'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TupleMidFragment'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=TupleFragment
- |4- SepExpr (Consumed=2)
- |5- TypeDecl:
- |- Head: TypeDeclHead: `Tuple` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=6)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'List elements'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Tuple::print' Type='void' Nargs=2
- |0- Tuple node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=Tuple: (Length=%i)\n
- \1- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: elements
- \- Field: len
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: elements
- \- Field: len
- |- Body: BlockBody: (N_Statements=4)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- NameExpr: 'depth'
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'i'
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: elements
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=\\%i-
- \1- NameExpr: 'i'
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=|%i-
- \1- NameExpr: 'i'
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: elements
- \- Field: get_Node
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |3- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: <void>
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Tuple::create' Type='Tuple' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'Tuple new'
- \- RHS: CastExpr (Target='Tuple')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(Tuple)@'
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=TupleEndFragment
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: elements
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: elements
- \- Field: append_Node
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: elements
- \- Field: append_Node
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='TupleEndFragment')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: element
- \-- Runoff Clause: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: elements
- \- RHS: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='TupleMidFragment')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: elements
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: elements
- \- Field: insert
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=int, value=0
- \1- CastExpr (Target='ptr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \2- ReturnExpr: NameExpr: 'new'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Tuple::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_PAREN_OPEN
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=TupleFragment
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \2- ReturnExpr: LiteralExpr: type=int, value=3
- \5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Tuple::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Tuple
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'Tuple'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'Tuple'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'Tuple'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- |6- SepExpr (Consumed=2)
- |7- TypeDecl:
- |- Head: TypeDeclHead: `ZeroTuple` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=5)
- |0- DeclExpr: 'NodeType type_'
- |1- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ZeroTuple::print' Type='void' Nargs=2
- |0- ZeroTuple node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ZeroTuple: (Length=0)\n
- \1- ReturnExpr: <void>
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ZeroTuple::create' Type='ZeroTuple' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'ZeroTuple new'
- \- RHS: CastExpr (Target='ZeroTuple')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(ZeroTuple)@'
- \1- ReturnExpr: NameExpr: 'new'
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ZeroTuple::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_PAREN_OPEN
- \- Field: or
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='!=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: type_
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=T_PAREN_CLOSE
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \1- ReturnExpr: LiteralExpr: type=int, value=2
- \4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='ZeroTuple::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ZeroTuple
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'ZeroTuple'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'ZeroTuple'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'ZeroTuple'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: matches_only_tokens
- \- Arguments: (Len=0)
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Tuple
- |8- SepExpr (Consumed=2)
- |9- TypeDecl:
- |- Head: TypeDeclHead: `OneTuple` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=6)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'Node element'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='OneTuple::print' Type='void' Nargs=2
- |0- OneTuple node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=OneTuple: (Length=1)\n
- |1- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- NameExpr: 'depth'
- |2- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\\-
- |3- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: element
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- \4- ReturnExpr: <void>
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='OneTuple::create' Type='OneTuple' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'OneTuple new'
- \- RHS: CastExpr (Target='OneTuple')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(OneTuple)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: element
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \2- ReturnExpr: NameExpr: 'new'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='OneTuple::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_PAREN_OPEN
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_PAREN_CLOSE
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \2- ReturnExpr: LiteralExpr: type=int, value=3
- \5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='OneTuple::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=OneTuple
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'OneTuple'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'OneTuple'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'OneTuple'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Tuple
- |10- SepExpr (Consumed=2)
- |42- SepExpr (Consumed=1)
- |43- FileNode: (N_Statements=7)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `TypeDeclHead` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=10)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'cstr name'
- |2- DeclExpr: 'bool is_type_alias'
- |3- DeclExpr: 'bool is_func_alias'
- |4- DeclExpr: 'bool packed'
- |5- DeclExpr: 'cstr alias_type'
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TypeDeclHead::print' Type='void' Nargs=2
- |0- TypeDeclHead node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=5)
- |0- LiteralExpr: type=cstr, value=TypeDeclHead: `%s` (Is_Func_Alias=%i, Is_Type_Alias:%i, Is_Packed=%i)
- |1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: name
- |2- CastExpr (Target='int')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: is_func_alias
- |3- CastExpr (Target='int')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: is_type_alias
- \4- CastExpr (Target='int')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: packed
- |1- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: is_type_alias
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value= Aliases Type: `%s`
- \1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: alias_type
- \-- Runoff Clause: IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: is_func_alias
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value= Aliases Function->`%s`
- \1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: alias_type
- |2- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\n
- \3- ReturnExpr: <void>
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TypeDeclHead::create' Type='TypeDeclHead' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'TypeDeclHead new'
- \- RHS: CastExpr (Target='TypeDeclHead')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(TypeDeclHead)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int matchnum'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TypeDeclHead'
- \- Field: match
- \- Arguments: (Len=1)
- \0- NameExpr: 'eles'
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: name
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: packed
- \- RHS: LiteralExpr: type=bool, value=0
- |4- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: is_type_alias
- \- RHS: LiteralExpr: type=bool, value=0
- |5- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: is_func_alias
- \- RHS: LiteralExpr: type=bool, value=0
- |6- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'matchnum'
- \- RHS: LiteralExpr: type=int, value=4
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: packed
- \- RHS: LiteralExpr: type=bool, value=1
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'matchnum'
- \- RHS: LiteralExpr: type=int, value=5
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: is_type_alias
- \- RHS: LiteralExpr: type=bool, value=1
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: alias_type
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=4
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'matchnum'
- \- RHS: LiteralExpr: type=int, value=6
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: is_func_alias
- \- RHS: LiteralExpr: type=bool, value=1
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: alias_type
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=5
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- \7- ReturnExpr: NameExpr: 'new'
- |8- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TypeDeclHead::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: GroupingExpr: BinOpExpr (Operator='&')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_TYPEDECL
- \- RHS: BinOpExpr (Operator='&')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_TYPEDECL_NAME
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_TYPEDECL_IS
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='>=')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: in_slice
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=4
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_TYPEDECL_PACKED
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=4
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_TYPEDECL_ALIAS
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='>=')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: in_slice
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=5
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=4
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=4
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_TYPEDECL_ALIAS_NAME
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=5
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='>=')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: in_slice
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=6
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=5
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=4
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_TYPEDECL_ALIAS_FUNC
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=5
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_TYPEDECL_ALIAS_FUNC_RT
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=6
- \2- ReturnExpr: LiteralExpr: type=int, value=3
- \9- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TypeDeclHead::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=TypeDeclHead
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TypeDeclHead'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TypeDeclHead'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TypeDeclHead'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: matches_only_tokens
- \- Arguments: (Len=0)
- |2- SepExpr (Consumed=2)
- |3- TypeDecl:
- |- Head: TypeDeclHead: `TypeDeclBody` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=6)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'List statements'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TypeDeclBody::print' Type='void' Nargs=2
- |0- TypeDeclBody node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=TypeDeclBody: (N_Statements=%i)\n
- \1- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: statements
- \- Field: len
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: statements
- \- Field: len
- |- Body: BlockBody: (N_Statements=3)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'i'
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: statements
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=\\%i-
- \1- NameExpr: 'i'
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: statements
- \- Field: get_Node
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=2
- \-- Runoff Clause: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=|%i-
- \1- NameExpr: 'i'
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: statements
- \- Field: get_Node
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=2
- |2- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: <void>
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TypeDeclBody::create' Type='TypeDeclBody' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'TypeDeclBody new'
- \- RHS: CastExpr (Target='TypeDeclBody')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(TypeDeclBody)@'
- |1- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: statements
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- \-- Runoff Clause: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: statements
- \- RHS: AccessorExpr (Mode='.')
- |- Object: GroupingExpr: CastExpr (Target='TypeDeclBody')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: statements
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: statements
- \- Field: insert
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=int, value=0
- \1- CastExpr (Target='ptr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \2- ReturnExpr: NameExpr: 'new'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TypeDeclBody::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: GroupingExpr: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=SepExpr
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |2- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=TypeDeclHead
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |3- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='>')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: in_slice
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=2
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=TypeDeclBody
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=3
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_TYPEDECL_ENDTYPE
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=2
- \4- ReturnExpr: LiteralExpr: type=int, value=0
- \5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TypeDeclBody::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=TypeDeclBody
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TypeDeclBody'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TypeDeclBody'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TypeDeclBody'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- |4- SepExpr (Consumed=2)
- |5- TypeDecl:
- |- Head: TypeDeclHead: `TypeDecl` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=7)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'TypeDeclHead head'
- |2- DeclExpr: 'TypeDeclBody body'
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TypeDecl::print' Type='void' Nargs=2
- |0- TypeDecl node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=TypeDecl:\n
- |1- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |2- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=|- Head:
- |3- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: CastExpr (Target='Node')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: head
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=2
- |4- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |5- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\\- Body:
- |6- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: CastExpr (Target='Node')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: body
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=2
- \7- ReturnExpr: <void>
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TypeDecl::create' Type='TypeDecl' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'TypeDecl new'
- \- RHS: CastExpr (Target='TypeDecl')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(TypeDecl)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: head
- \- RHS: CastExpr (Target='TypeDeclHead')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: body
- \- RHS: CastExpr (Target='TypeDeclBody')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \3- ReturnExpr: NameExpr: 'new'
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TypeDecl::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=TypeDeclHead
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=TypeDeclBody
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \1- ReturnExpr: LiteralExpr: type=int, value=2
- \6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='TypeDecl::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=TypeDecl
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TypeDecl'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TypeDecl'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'TypeDecl'
- \- Field: match
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: matches_only_nodes
- \- Arguments: (Len=0)
- |6- SepExpr (Consumed=2)
- |44- SepExpr (Consumed=1)
- |45- FileNode: (N_Statements=3)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `UnOpExpr` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=8)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'cstr op'
- |2- DeclExpr: 'Node value'
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='UnOpExpr::print' Type='void' Nargs=2
- |0- UnOpExpr node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=UnOpExpr (Operator='%s')\n
- \1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: op
- |1- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- NameExpr: 'depth'
- |2- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\- Value:
- |3- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: value
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- \4- ReturnExpr: <void>
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='UnOpExpr::create' Type='UnOpExpr' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'UnOpExpr new'
- \- RHS: CastExpr (Target='UnOpExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(UnOpExpr)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: value
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: op
- \- RHS: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: text
- \3- ReturnExpr: NameExpr: 'new'
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='UnOpExpr::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_UNOP
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \2- ReturnExpr: LiteralExpr: type=int, value=2
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='UnOpExpr::visit' Type='void' Nargs=2
- |0- UnOpExpr n
- \1- TransformerPass p
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: value
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: value
- \1- ReturnExpr: <void>
- \7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='UnOpExpr::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=UnOpExpr
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'UnOpExpr'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'UnOpExpr'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'UnOpExpr'
- \- Field: match
- \- Field: set_visitor
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeVisitor')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'UnOpExpr'
- \- Field: visit
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- |2- SepExpr (Consumed=2)
- |46- SepExpr (Consumed=1)
- |47- FileNode: (N_Statements=3)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `WhileExpr` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=8)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'Node condition'
- |2- DeclExpr: 'BlockBody body'
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='WhileExpr::print' Type='void' Nargs=2
- |0- WhileExpr node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=WhileExpr:\n
- |1- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |2- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=|- Condition:
- |3- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: condition
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=2
- |4- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |5- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=|- Body:
- |6- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: CastExpr (Target='Node')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: body
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=2
- \7- ReturnExpr: <void>
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='WhileExpr::create' Type='WhileExpr' Nargs=1
- \0- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'WhileExpr new'
- \- RHS: CastExpr (Target='WhileExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(WhileExpr)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: condition
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: body
- \- RHS: CastExpr (Target='BlockBody')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: n
- \- Arguments: (Len=0)
- \3- ReturnExpr: NameExpr: 'new'
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='WhileExpr::match' Type='int' Nargs=1
- \0- EleList eles
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: is_token
- \- Field: or
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_WHILE
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \- Field: t
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=T_DO
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=ValueExpression
- \- Field: or
- \- Arguments: (Len=1)
- \0- UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=3
- \- Field: n
- \- Arguments: (Len=0)
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=BlockBody
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=int, value=0
- \2- ReturnExpr: LiteralExpr: type=int, value=4
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='WhileExpr::visit' Type='void' Nargs=2
- |0- WhileExpr n
- \1- TransformerPass p
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: condition
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: condition
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: body
- \- RHS: CastExpr (Target='BlockBody')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- CastExpr (Target='Node')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: body
- \2- ReturnExpr: <void>
- \7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='WhileExpr::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=WhileExpr
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'WhileExpr'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'WhileExpr'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'WhileExpr'
- \- Field: match
- \- Field: set_visitor
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeVisitor')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'WhileExpr'
- \- Field: visit
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=4
- \- Field: addtype
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Expression
- |2- SepExpr (Consumed=2)
- |48- SepExpr (Consumed=1)
- |49- FileNode: (N_Statements=3)
- |0- SepExpr (Consumed=1)
- |1- TypeDecl:
- |- Head: TypeDeclHead: `FileNode` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=7)
- |0- DeclExpr: 'NodeType type_'
- |1- DeclExpr: 'List statements'
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FileNode::print' Type='void' Nargs=2
- |0- FileNode node
- \1- int depth
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=FileNode: (N_Statements=%i)\n
- \1- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: statements
- \- Field: len
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: statements
- \- Field: len
- |- Body: BlockBody: (N_Statements=4)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'parse'
- \- Field: indent
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=1
- |1- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=|%i-
- \1- NameExpr: 'i'
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'node'
- \- Field: statements
- \- Field: get_Node
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: print
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'depth'
- \- RHS: LiteralExpr: type=int, value=2
- |3- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: <void>
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FileNode::create' Type='FileNode' Nargs=2
- |0- Project p
- \1- EleList eles
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'FileNode new'
- \- RHS: CastExpr (Target='FileNode')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(FileNode)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: type_
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: type_by_name
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=FileNode
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: statements
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- |3- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |4- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: in_slice
- \- Arguments: (Len=0)
- |- Body: BlockBody: (N_Statements=3)
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: is_token
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: print
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'shoc'
- \- Field: bail_out
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=Got a token in the input to FileNode::create!
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: statements
- \- Field: append_Node
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'eles'
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: n
- \- Arguments: (Len=0)
- |2- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \5- ReturnExpr: NameExpr: 'new'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FileNode::match' Type='int' Nargs=1
- \0- EleList eles
- \0- ReturnExpr: LiteralExpr: type=int, value=0
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FileNode::visit' Type='void' Nargs=2
- |0- FileNode n
- \1- TransformerPass p
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- DeclExpr: 'Node res'
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: statements
- \- Field: len
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'res'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: visit
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: statements
- \- Field: get_Node
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: CastExpr (Target='ptr')
- \- Value: NameExpr: 'res'
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: statements
- \- Field: del
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: statements
- \- Field: set
- \- Arguments: (Len=2)
- |0- NameExpr: 'i'
- \1- CastExpr (Target='ptr')
- \- Value: NameExpr: 'res'
- |2- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: <void>
- \6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FileNode::impl' Type='NodeType' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'NodeType'
- \- Field: new
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=FileNode
- \- Field: set_printer
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodePrinter')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'FileNode'
- \- Field: print
- \- Field: set_creator
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeCreator')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'FileNode'
- \- Field: create
- \- Field: set_matcher
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeMatcher')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'FileNode'
- \- Field: match
- \- Field: set_visitor
- \- Arguments: (Len=1)
- \0- CastExpr (Target='NodeVisitor')
- \- Value: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'FileNode'
- \- Field: visit
- \- Field: matches
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- |2- SepExpr (Consumed=2)
- |50- SepExpr (Consumed=2)
- |51- FunctionDecl:
- |- Head: FunctionDeclHead: Name='parse::init_default' Type='void' Nargs=1
- \0- List l
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'NameExpr$$impl'
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'DeclExpr$$impl'
- \- Arguments: (Len=0)
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'AccessorExpr$$impl'
- \- Arguments: (Len=0)
- |3- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$impl'
- \- Arguments: (Len=0)
- |4- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'GroupingExpr$$impl'
- \- Arguments: (Len=0)
- |5- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'BinOpExpr$$impl'
- \- Arguments: (Len=0)
- |6- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'UnOpExpr$$impl'
- \- Arguments: (Len=0)
- |7- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'CastExpr$$impl'
- \- Arguments: (Len=0)
- |8- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'IndexExpr$$impl'
- \- Arguments: (Len=0)
- |9- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'CallExpr$$impl'
- \- Arguments: (Len=0)
- |10- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'AssignmentExpr$$impl'
- \- Arguments: (Len=0)
- |11- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'ReturnExpr$$impl'
- \- Arguments: (Len=0)
- |12- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TupleEndFragment$$impl'
- \- Arguments: (Len=0)
- |13- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TupleMidFragment$$impl'
- \- Arguments: (Len=0)
- |14- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'Tuple$$impl'
- \- Arguments: (Len=0)
- |15- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'ZeroTuple$$impl'
- \- Arguments: (Len=0)
- |16- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'ZeroArgList$$impl'
- \- Arguments: (Len=0)
- |17- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'OneArgList$$impl'
- \- Arguments: (Len=0)
- |18- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'MultiArgListStart$$impl'
- \- Arguments: (Len=0)
- |19- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'MultiArgListExt$$impl'
- \- Arguments: (Len=0)
- |20- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'MultiArgList$$impl'
- \- Arguments: (Len=0)
- |21- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'FunctionDeclHead$$impl'
- \- Arguments: (Len=0)
- |22- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'FunctionBody$$impl'
- \- Arguments: (Len=0)
- |23- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'FunctionDecl$$impl'
- \- Arguments: (Len=0)
- |24- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'IfExprHead$$impl'
- \- Arguments: (Len=0)
- |25- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'IfExpr$$impl'
- \- Arguments: (Len=0)
- |26- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'WhileExpr$$impl'
- \- Arguments: (Len=0)
- |27- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'BlockBody$$impl'
- \- Arguments: (Len=0)
- |28- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'IntrinsicExpr$$impl'
- \- Arguments: (Len=0)
- |29- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'ImportStmt$$impl'
- \- Arguments: (Len=0)
- |30- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TypeDeclHead$$impl'
- \- Arguments: (Len=0)
- |31- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TypeDeclBody$$impl'
- \- Arguments: (Len=0)
- |32- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'TypeDecl$$impl'
- \- Arguments: (Len=0)
- |33- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'SepExpr$$impl'
- \- Arguments: (Len=0)
- |34- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'OneTuple$$impl'
- \- Arguments: (Len=0)
- |35- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'l'
- \- Field: append_NodeType
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'FileNode$$impl'
- \- Arguments: (Len=0)
- \36- ReturnExpr: <void>
- |52- SepExpr (Consumed=2)
- |53- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:show_types' Type='void' Nargs=1
- \0- Project proj
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int p'
- \- RHS: LiteralExpr: type=int, value=0
- |1- DeclExpr: 'int i'
- |2- DeclExpr: 'NodeType t'
- |3- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'p'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'proj'
- \- Field: node_types
- \- Field: len
- |- Body: BlockBody: (N_Statements=5)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 't'
- \- RHS: CastExpr (Target='NodeType')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'proj'
- \- Field: node_types
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'p'
- |1- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=\n%s%s:
- |1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: name
- \2- BinOpExpr (Operator='*')
- |- LHS: LiteralExpr: type=cstr, value=
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: LiteralExpr: type=int, value=20
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: name
- \- Field: len
- \- Arguments: (Len=0)
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: CastExpr (Target='ptr')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: things_i_am
- \- RHS: LiteralExpr: type=ptr, value=0
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'i'
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: things_i_am
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |1- WhileExpr:
- |- Condition: BinOpExpr (Operator='>')
- |- LHS: NameExpr: 'i'
- \- RHS: UnOpExpr (Operator='-')
- \- Value: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value= %s%s
- |1- CastExpr (Target='cstr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: things_i_am
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \2- BinOpExpr (Operator='*')
- |- LHS: LiteralExpr: type=cstr, value=
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: LiteralExpr: type=int, value=25
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CastExpr (Target='cstr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: things_i_am
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: len
- \- Arguments: (Len=0)
- |1- AssignmentExpr (Operator='-=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |3- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value= %s
- \1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: name
- |4- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'p'
- \- RHS: LiteralExpr: type=int, value=1
- |4- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\n
- \5- ReturnExpr: <void>
- |54- SepExpr (Consumed=1)
- |6- SepExpr (Consumed=2)
- |7- FileNode: (N_Statements=20)
- |0- SepExpr (Consumed=1)
- |1- SepExpr (Consumed=2)
- |2- FileNode: (N_Statements=5)
- |0- SepExpr (Consumed=2)
- |1- FunctionDecl:
- |- Head: FunctionDeclHead: Name='rewrite_namespaces::visit_accessor' Type='AccessorExpr' Nargs=2
- |0- AccessorExpr n
- \1- TransformerPass p
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: mode
- \- RHS: LiteralExpr: type=cstr, value=::
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: object
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=NameExpr
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CastExpr (Target='AccessorExpr')
- \- Value: CallExpr:
- |- Method: NameExpr: 'NameExpr$$create_direct'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='+')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='NameExpr')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: object
- \- Field: name
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: LiteralExpr: type=cstr, value=$$
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: field
- \1- ReturnExpr: NameExpr: 'n'
- |2- SepExpr (Consumed=2)
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='rewrite_namespaces::init' Type='TransformerPass' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TransformerPass$$new'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=rewrite_namespaces
- \- Field: add_specialization
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=AccessorExpr
- \1- CastExpr (Target='NodeTransformer')
- \- Value: NameExpr: 'rewrite_namespaces$$visit_accessor'
- |4- SepExpr (Consumed=1)
- |3- SepExpr (Consumed=1)
- |4- FileNode: (N_Statements=5)
- |0- SepExpr (Consumed=2)
- |1- FunctionDecl:
- |- Head: FunctionDeclHead: Name='fold_constants::visit_binop' Type='Node' Nargs=2
- |0- BinOpExpr n
- \1- TransformerPass p
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: lhs
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=LiteralExpr
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: rhs
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=LiteralExpr
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'LiteralExpr lhs'
- \- RHS: CastExpr (Target='LiteralExpr')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: lhs
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'LiteralExpr rhs'
- \- RHS: CastExpr (Target='LiteralExpr')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: rhs
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'lhs'
- \- Field: value_type
- \- RHS: LiteralExpr: type=cstr, value=int
- \- RHS: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'rhs'
- \- Field: value_type
- \- RHS: LiteralExpr: type=cstr, value=int
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int ri'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'rhs'
- \- Field: value
- \- Field: int
- \- Arguments: (Len=0)
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int li'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'lhs'
- \- Field: value
- \- Field: int
- \- Arguments: (Len=0)
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=+
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_int'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'ri'
- \- RHS: NameExpr: 'li'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=-
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_int'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='-')
- |- LHS: NameExpr: 'li'
- \- RHS: NameExpr: 'ri'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=*
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_int'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='*')
- |- LHS: NameExpr: 'li'
- \- RHS: NameExpr: 'ri'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=/
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_int'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='/')
- |- LHS: NameExpr: 'li'
- \- RHS: NameExpr: 'ri'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=>>
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_int'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='>>')
- |- LHS: NameExpr: 'li'
- \- RHS: NameExpr: 'ri'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=<<
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_int'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='<<')
- |- LHS: NameExpr: 'li'
- \- RHS: NameExpr: 'ri'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value===
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_bool'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'li'
- \- RHS: NameExpr: 'ri'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=!=
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_bool'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='!=')
- |- LHS: NameExpr: 'li'
- \- RHS: NameExpr: 'ri'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=>
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_bool'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='>')
- |- LHS: NameExpr: 'li'
- \- RHS: NameExpr: 'ri'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=<
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_bool'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'li'
- \- RHS: NameExpr: 'ri'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=>=
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_bool'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='>=')
- |- LHS: NameExpr: 'li'
- \- RHS: NameExpr: 'ri'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=<=
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_bool'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='<=')
- |- LHS: NameExpr: 'li'
- \- RHS: NameExpr: 'ri'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=&
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_int'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='&')
- |- LHS: NameExpr: 'li'
- \- RHS: NameExpr: 'ri'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=%
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_int'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='%')
- |- LHS: NameExpr: 'li'
- \- RHS: NameExpr: 'ri'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'lhs'
- \- Field: value_type
- \- RHS: LiteralExpr: type=cstr, value=float
- \- RHS: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'rhs'
- \- Field: value_type
- \- RHS: LiteralExpr: type=cstr, value=float
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'float rf'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'rhs'
- \- Field: value
- \- Field: float
- \- Arguments: (Len=0)
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'float lf'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'lhs'
- \- Field: value
- \- Field: float
- \- Arguments: (Len=0)
- |2- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=+
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_float'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'rf'
- \- RHS: NameExpr: 'lf'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=-
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_float'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='-')
- |- LHS: NameExpr: 'lf'
- \- RHS: NameExpr: 'rf'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=*
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_float'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='*')
- |- LHS: NameExpr: 'lf'
- \- RHS: NameExpr: 'rf'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=/
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_float'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='/')
- |- LHS: NameExpr: 'lf'
- \- RHS: NameExpr: 'rf'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value===
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_bool'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'lf'
- \- RHS: NameExpr: 'rf'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=!=
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_bool'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='!=')
- |- LHS: NameExpr: 'lf'
- \- RHS: NameExpr: 'rf'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=>
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_bool'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='>')
- |- LHS: NameExpr: 'lf'
- \- RHS: NameExpr: 'rf'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=<
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_bool'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'lf'
- \- RHS: NameExpr: 'rf'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=>=
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_bool'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='>=')
- |- LHS: NameExpr: 'lf'
- \- RHS: NameExpr: 'rf'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=<=
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct_bool'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- BinOpExpr (Operator='<=')
- |- LHS: NameExpr: 'lf'
- \- RHS: NameExpr: 'rf'
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'lhs'
- \- Field: value_type
- \- RHS: LiteralExpr: type=cstr, value=cstr
- \- RHS: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'rhs'
- \- Field: value_type
- \- RHS: LiteralExpr: type=cstr, value=cstr
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=+
- \- RHS: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \- Field: options
- \- Field: contains
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=no_str_add_fold
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct'
- \- Arguments: (Len=3)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- |1- LiteralExpr: type=cstr, value=cstr
- \2- BinOpExpr (Operator='+')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'lhs'
- \- Field: value
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'rhs'
- \- Field: value
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'lhs'
- \- Field: value_type
- \- RHS: LiteralExpr: type=cstr, value=cstr
- \- RHS: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'rhs'
- \- Field: value_type
- \- RHS: LiteralExpr: type=cstr, value=int
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: op
- \- RHS: LiteralExpr: type=cstr, value=*
- \- RHS: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \- Field: options
- \- Field: contains
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=no_str_mul_fold
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: NameExpr: 'LiteralExpr$$create_direct'
- \- Arguments: (Len=3)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- |1- LiteralExpr: type=cstr, value=cstr
- \2- BinOpExpr (Operator='*')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'lhs'
- \- Field: value
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'rhs'
- \- Field: value
- \- Field: int
- \- Arguments: (Len=0)
- \1- ReturnExpr: CastExpr (Target='Node')
- \- Value: NameExpr: 'n'
- |2- SepExpr (Consumed=2)
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='fold_constants::init' Type='TransformerPass' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TransformerPass$$new'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=fold_constants
- \- Field: add_specialization
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=BinOpExpr
- \1- CastExpr (Target='NodeTransformer')
- \- Value: NameExpr: 'fold_constants$$visit_binop'
- |4- SepExpr (Consumed=1)
- |5- SepExpr (Consumed=1)
- |6- FileNode: (N_Statements=5)
- |0- SepExpr (Consumed=2)
- |1- FunctionDecl:
- |- Head: FunctionDeclHead: Name='elide_groupings::visit_grouping' Type='Node' Nargs=2
- |0- GroupingExpr n
- \1- TransformerPass p
- \0- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: contents
- |2- SepExpr (Consumed=2)
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='elide_groupings::init' Type='TransformerPass' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TransformerPass$$new'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=elide_groupings
- \- Field: add_specialization
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=GroupingExpr
- \1- CastExpr (Target='NodeTransformer')
- \- Value: NameExpr: 'elide_groupings$$visit_grouping'
- |4- SepExpr (Consumed=1)
- |7- SepExpr (Consumed=1)
- |8- FileNode: (N_Statements=7)
- |0- SepExpr (Consumed=2)
- |1- FunctionDecl:
- |- Head: FunctionDeclHead: Name='elide_branches::visit_if' Type='Node' Nargs=2
- |0- IfExpr n
- \1- TransformerPass p
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: condition
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=LiteralExpr
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'LiteralExpr lit'
- \- RHS: CastExpr (Target='LiteralExpr')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: condition
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'lit'
- \- Field: value_type
- \- RHS: LiteralExpr: type=cstr, value=int
- \- Field: or
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'lit'
- \- Field: value_type
- \- RHS: LiteralExpr: type=cstr, value=bool
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'lit'
- \- Field: value
- \- Field: int
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CastExpr (Target='Node')
- \- Value: CallExpr:
- |- Method: NameExpr: 'BlockBody$$create_direct'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: body
- \- Field: statements
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: body
- \- Field: has_runoff_clause
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: body
- \- Field: runoff_clause
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=BlockBody
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CastExpr (Target='Node')
- \- Value: CallExpr:
- |- Method: NameExpr: 'BlockBody$$create_direct'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \1- AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='BlockBody')
- \- Value: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: body
- \- Field: runoff_clause
- \- Field: statements
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CastExpr (Target='Node')
- \- Value: LiteralExpr: type=ptr, value=0
- \1- ReturnExpr: CastExpr (Target='Node')
- \- Value: NameExpr: 'n'
- |2- SepExpr (Consumed=2)
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='elide_branches::visit_while' Type='Node' Nargs=2
- |0- WhileExpr n
- \1- TransformerPass p
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: condition
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=LiteralExpr
- |- Body: BlockBody: (N_Statements=2)
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'LiteralExpr lit'
- \- RHS: CastExpr (Target='LiteralExpr')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: condition
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'lit'
- \- Field: value_type
- \- RHS: LiteralExpr: type=cstr, value=int
- |- Body: BlockBody: (N_Statements=1)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'lit'
- \- Field: value
- \- Field: int
- \- Arguments: (Len=0)
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CastExpr (Target='Node')
- \- Value: LiteralExpr: type=ptr, value=0
- \1- ReturnExpr: CastExpr (Target='Node')
- \- Value: NameExpr: 'n'
- |4- SepExpr (Consumed=2)
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='elide_branches::init' Type='TransformerPass' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TransformerPass$$new'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=elide_branches
- \- Field: add_specialization
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=IfExpr
- \1- CastExpr (Target='NodeTransformer')
- \- Value: NameExpr: 'elide_branches$$visit_if'
- \- Field: add_specialization
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=WhileExpr
- \1- CastExpr (Target='NodeTransformer')
- \- Value: NameExpr: 'elide_branches$$visit_while'
- |6- SepExpr (Consumed=1)
- |9- SepExpr (Consumed=1)
- |10- FileNode: (N_Statements=7)
- |0- SepExpr (Consumed=1)
- |1- FileNode: (N_Statements=6)
- |0- SepExpr (Consumed=1)
- |1- SepExpr (Consumed=2)
- |2- FunctionDecl:
- |- Head: FunctionDeclHead: Name='shoc::resolve_name_import' Type='cstr' Nargs=2
- |0- List path
- \1- cstr import_name
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- DeclExpr: 'cstr path_attempt'
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'path'
- \- Field: len
- |- Body: BlockBody: (N_Statements=5)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'path_attempt'
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: CastExpr (Target='cstr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'path'
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: LiteralExpr: type=cstr, value=/
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'import_name'
- \- RHS: LiteralExpr: type=cstr, value=.ort
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: NameExpr: 'File$$exists'
- \- Arguments: (Len=1)
- \0- NameExpr: 'path_attempt'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: NameExpr: 'path_attempt'
- |2- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'path_attempt'
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: CastExpr (Target='cstr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'path'
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: LiteralExpr: type=cstr, value=/
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'import_name'
- \- RHS: LiteralExpr: type=cstr, value=/__init__.ort
- |3- IfExpr:
- |- Condition: CallExpr:
- |- Method: NameExpr: 'File$$exists'
- \- Arguments: (Len=1)
- \0- NameExpr: 'path_attempt'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: NameExpr: 'path_attempt'
- |4- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |3- CallExpr:
- |- Method: NameExpr: 'shoc$$bail_out'
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: LiteralExpr: type=cstr, value=Can't resolve bare-name import of:
- \- RHS: NameExpr: 'import_name'
- \4- ReturnExpr: LiteralExpr: type=cstr, value=
- |3- SepExpr (Consumed=2)
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='shoc::resolve_absolute_import' Type='cstr' Nargs=1
- \0- cstr path
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'cstr ret'
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: CallExpr:
- |- Method: NameExpr: 'os$$get_cwd'
- \- Arguments: (Len=0)
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: LiteralExpr: type=cstr, value=/
- \- RHS: NameExpr: 'path'
- |1- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: NameExpr: 'File$$exists'
- \- Arguments: (Len=1)
- \0- NameExpr: 'ret'
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'shoc$$bail_out'
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: LiteralExpr: type=cstr, value=Can't resolve quoted-path import of:
- \- RHS: NameExpr: 'path'
- \2- ReturnExpr: NameExpr: 'ret'
- |5- SepExpr (Consumed=1)
- |2- SepExpr (Consumed=2)
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='apply_includes::visit_import' Type='Node' Nargs=2
- |0- ImportStmt n
- \1- TransformerPass p
- |0- DeclExpr: 'cstr path'
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: name
- \- Field: contains
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\x22
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int start'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: name
- \- Field: find
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\x22
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int end'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: name
- \- Field: offset
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'start'
- \- RHS: LiteralExpr: type=int, value=1
- \- Field: find
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\x22
- |2- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'path'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'shoc$$resolve_absolute_import'
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: name
- \- Field: substr
- \- Arguments: (Len=2)
- |0- BinOpExpr (Operator='+')
- |- LHS: NameExpr: 'start'
- \- RHS: LiteralExpr: type=int, value=1
- \1- NameExpr: 'end'
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'path'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'shoc$$resolve_name_import'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \- Field: search_path
- \1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: name
- \- Field: substr
- \- Arguments: (Len=2)
- |0- BinOpExpr (Operator='+')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: name
- \- Field: find
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=
- \- RHS: LiteralExpr: type=int, value=1
- \1- BinOpExpr (Operator='-')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: name
- \- Field: len
- \- Arguments: (Len=0)
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: name
- \- Field: find
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=
- \- RHS: LiteralExpr: type=int, value=1
- |2- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |3- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \- Field: included_files
- \- Field: len
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: CastExpr (Target='cstr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \- Field: included_files
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- RHS: NameExpr: 'path'
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CastExpr (Target='Node')
- \- Value: LiteralExpr: type=ptr, value=0
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |4- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \- Field: included_files
- \- Field: append
- \- Arguments: (Len=1)
- \0- NameExpr: 'path'
- |5- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'File fd'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'File$$open'
- \- Arguments: (Len=2)
- |0- NameExpr: 'path'
- \1- LiteralExpr: type=cstr, value=r
- |6- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'cstr text'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'fd'
- \- Field: readall
- \- Arguments: (Len=0)
- |7- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'fd'
- \- Field: close
- \- Arguments: (Len=0)
- \8- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \- Field: process_text
- \- Arguments: (Len=1)
- \0- NameExpr: 'text'
- |4- SepExpr (Consumed=2)
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='apply_includes::init' Type='TransformerPass' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TransformerPass$$new'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=apply_includes
- \- Field: add_specialization
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=ImportStmt
- \1- CastExpr (Target='NodeTransformer')
- \- Value: NameExpr: 'apply_includes$$visit_import'
- |6- SepExpr (Consumed=1)
- |11- SepExpr (Consumed=1)
- |12- FileNode: (N_Statements=5)
- |0- SepExpr (Consumed=2)
- |1- FunctionDecl:
- |- Head: FunctionDeclHead: Name='strip_seps::visit_sep' Type='Node' Nargs=2
- |0- SepExpr n
- \1- TransformerPass p
- \0- ReturnExpr: CastExpr (Target='Node')
- \- Value: LiteralExpr: type=ptr, value=0
- |2- SepExpr (Consumed=2)
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='strip_seps::init' Type='TransformerPass' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TransformerPass$$new'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=strip_seps
- \- Field: add_specialization
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=SepExpr
- \1- CastExpr (Target='NodeTransformer')
- \- Value: NameExpr: 'strip_seps$$visit_sep'
- |4- SepExpr (Consumed=1)
- |13- SepExpr (Consumed=2)
- |14- FileNode: (N_Statements=5)
- |0- SepExpr (Consumed=2)
- |1- FunctionDecl:
- |- Head: FunctionDeclHead: Name='predefine_types::visit_type' Type='TypeDecl' Nargs=2
- |0- TypeDecl n
- \1- TransformerPass p
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \- Field: add_Type
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'StructOType$$new'
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: head
- \- Field: name
- \1- ReturnExpr: NameExpr: 'n'
- |2- SepExpr (Consumed=2)
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='predefine_types::init' Type='TransformerPass' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TransformerPass$$new'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=predefine_types
- \- Field: add_specialization
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=TypeDecl
- \1- CastExpr (Target='NodeTransformer')
- \- Value: NameExpr: 'predefine_types$$visit_type'
- |4- SepExpr (Consumed=1)
- |15- SepExpr (Consumed=1)
- |16- FileNode: (N_Statements=7)
- |0- SepExpr (Consumed=2)
- |1- FunctionDecl:
- |- Head: FunctionDeclHead: Name='define_types::visit_type' Type='TypeDecl' Nargs=2
- |0- TypeDecl n
- \1- TransformerPass p
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- DeclExpr: 'Node st'
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: body
- \- Field: statements
- \- Field: len
- |- Body: BlockBody: (N_Statements=3)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'st'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: body
- \- Field: statements
- \- Field: get_Node
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'st'
- \- Field: is_a
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=DeclExpr
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='StructOType')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \- Field: get_type
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: head
- \- Field: name
- \- Field: fields
- \- Field: append
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: CastExpr (Target='DeclExpr')
- \- Value: NameExpr: 'st'
- \- Field: name
- |2- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: NameExpr: 'n'
- |2- SepExpr (Consumed=2)
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='define_types::visit_alias' Type='TypeDeclHead' Nargs=2
- |0- TypeDeclHead n
- \1- TransformerPass p
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='&')
- |- LHS: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: is_type_alias
- \- RHS: UnOpExpr (Operator='-')
- \- Value: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: is_func_alias
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'shoc$$bail_out'
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: LiteralExpr: type=cstr, value=Malformed typedecl
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: name
- \- RHS: LiteralExpr: type=cstr, value=... head only
- |1- IfExpr:
- |- Condition: UnOpExpr (Operator='-')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \- Field: types
- \- Field: contains
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: alias_type
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'shoc$$bail_out'
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: LiteralExpr: type=cstr, value=No such type
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: alias_type
- \- RHS: BinOpExpr (Operator='+')
- |- LHS: LiteralExpr: type=cstr, value= for RT of FPtr in define_types::visit_alias, atype=
- \- RHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: name
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \- Field: add_Type
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'FPtrOType$$new'
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: name
- \1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: proj
- \- Field: get_type
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'n'
- \- Field: alias_type
- \3- ReturnExpr: NameExpr: 'n'
- |4- SepExpr (Consumed=2)
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='define_types::init' Type='TransformerPass' Nargs=0
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'TransformerPass$$new'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=define_types
- \- Field: add_specialization
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=TypeDecl
- \1- CastExpr (Target='NodeTransformer')
- \- Value: NameExpr: 'define_types$$visit_type'
- \- Field: add_specialization
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=TypeDeclHead
- \1- CastExpr (Target='NodeTransformer')
- \- Value: NameExpr: 'define_types$$visit_alias'
- |6- SepExpr (Consumed=1)
- |17- SepExpr (Consumed=2)
- |18- FunctionDecl:
- |- Head: FunctionDeclHead: Name='shoc::transformers::init' Type='void' Nargs=1
- \0- Project p
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Transformer
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'apply_includes$$init'
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Transformer
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'rewrite_namespaces$$init'
- \- Arguments: (Len=0)
- |2- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Transformer
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'elide_groupings$$init'
- \- Arguments: (Len=0)
- |3- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Transformer
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'fold_constants$$init'
- \- Arguments: (Len=0)
- |4- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Transformer
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'elide_branches$$init'
- \- Arguments: (Len=0)
- |5- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Transformer
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'strip_seps$$init'
- \- Arguments: (Len=0)
- |6- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Transformer
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'predefine_types$$init'
- \- Arguments: (Len=0)
- |7- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Transformer
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'define_types$$init'
- \- Arguments: (Len=0)
- \8- ReturnExpr: <void>
- |19- SepExpr (Consumed=1)
- |8- SepExpr (Consumed=2)
- |9- FileNode: (N_Statements=29)
- |0- SepExpr (Consumed=1)
- |1- DeclExpr: 'int VOID'
- |2- SepExpr (Consumed=1)
- |3- DeclExpr: 'int S_INT'
- |4- SepExpr (Consumed=1)
- |5- DeclExpr: 'int U_INT'
- |6- SepExpr (Consumed=1)
- |7- DeclExpr: 'int FLOAT'
- |8- SepExpr (Consumed=1)
- |9- DeclExpr: 'int POINTER'
- |10- SepExpr (Consumed=1)
- |11- DeclExpr: 'int F_PTR'
- |12- SepExpr (Consumed=1)
- |13- DeclExpr: 'int STRUCT'
- |14- SepExpr (Consumed=2)
- |15- FunctionDecl:
- |- Head: FunctionDeclHead: Name='datamodel::variety_to_name' Type='cstr' Nargs=1
- \0- int variety
- |0- IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'variety'
- \- RHS: LiteralExpr: type=int, value=0
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=cstr, value=VOID
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'variety'
- \- RHS: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=cstr, value=S_INT
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'variety'
- \- RHS: LiteralExpr: type=int, value=2
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=cstr, value=U_INT
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'variety'
- \- RHS: LiteralExpr: type=int, value=3
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=cstr, value=FLOAT
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'variety'
- \- RHS: LiteralExpr: type=int, value=4
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=cstr, value=POINTER
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'variety'
- \- RHS: LiteralExpr: type=int, value=5
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=cstr, value=F_PTR
- \-- Runoff Clause: IfExpr:
- |- Condition: BinOpExpr (Operator='==')
- |- LHS: NameExpr: 'variety'
- \- RHS: LiteralExpr: type=int, value=6
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: LiteralExpr: type=cstr, value=STRUCT
- |1- CallExpr:
- |- Method: NameExpr: 'shoc$$bail_out'
- \- Arguments: (Len=1)
- \0- BinOpExpr (Operator='+')
- |- LHS: LiteralExpr: type=cstr, value=datamodel::variety_to_name called on invalid variety:
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'variety'
- \- Field: str
- \- Arguments: (Len=0)
- \2- ReturnExpr: LiteralExpr: type=cstr, value=
- |16- SepExpr (Consumed=2)
- |17- TypeDecl:
- |- Head: TypeDeclHead: `OType` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=12)
- |0- DeclExpr: 'int variety'
- |1- DeclExpr: 'cstr name'
- |2- DeclExpr: 'Project proj'
- |3- FunctionDecl:
- |- Head: FunctionDeclHead: Name='OType:is_primitive' Type='bool' Nargs=1
- \0- OType t
- \0- ReturnExpr: BinOpExpr (Operator='<')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: variety
- \- RHS: LiteralExpr: type=int, value=5
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='OType:is_fptr' Type='bool' Nargs=1
- \0- OType t
- \0- ReturnExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: variety
- \- RHS: LiteralExpr: type=int, value=5
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='OType:is_struct' Type='bool' Nargs=1
- \0- OType t
- \0- ReturnExpr: BinOpExpr (Operator='==')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: variety
- \- RHS: LiteralExpr: type=int, value=6
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='OType:as_primitive' Type='PrimitiveOType' Nargs=1
- \0- OType t
- \0- ReturnExpr: CastExpr (Target='PrimitiveOType')
- \- Value: NameExpr: 't'
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='OType:as_struct' Type='StructOType' Nargs=1
- \0- OType t
- \0- ReturnExpr: CastExpr (Target='StructOType')
- \- Value: NameExpr: 't'
- |8- FunctionDecl:
- |- Head: FunctionDeclHead: Name='OType:as_fptr' Type='FPtrOType' Nargs=1
- \0- OType t
- \0- ReturnExpr: CastExpr (Target='FPtrOType')
- \- Value: NameExpr: 't'
- |9- FunctionDecl:
- |- Head: FunctionDeclHead: Name='OType:get_size' Type='int' Nargs=1
- \0- OType t
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: is_primitive
- \- Arguments: (Len=0)
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: as_primitive
- \- Arguments: (Len=0)
- \- Field: get_size
- \- Arguments: (Len=0)
- \-- Runoff Clause: IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: is_fptr
- \- Arguments: (Len=0)
- |- Body: BlockBody: (N_Statements=1)
- |0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: as_fptr
- \- Arguments: (Len=0)
- \- Field: get_size
- \- Arguments: (Len=0)
- \1- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: as_struct
- \- Arguments: (Len=0)
- \- Field: get_size
- \- Arguments: (Len=0)
- |10- FunctionDecl:
- |- Head: FunctionDeclHead: Name='OType:set_project' Type='OType' Nargs=2
- |0- OType t
- \1- Project p
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: proj
- \- RHS: NameExpr: 'p'
- \1- ReturnExpr: NameExpr: 't'
- \11- FunctionDecl:
- |- Head: FunctionDeclHead: Name='OType:print' Type='void' Nargs=1
- \0- OType t
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: is_primitive
- \- Arguments: (Len=0)
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: as_primitive
- \- Arguments: (Len=0)
- \- Field: print
- \- Arguments: (Len=0)
- \-- Runoff Clause: IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: is_fptr
- \- Arguments: (Len=0)
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: as_fptr
- \- Arguments: (Len=0)
- \- Field: print
- \- Arguments: (Len=0)
- \-- Runoff Clause: IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: is_struct
- \- Arguments: (Len=0)
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: as_struct
- \- Arguments: (Len=0)
- \- Field: print
- \- Arguments: (Len=0)
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=??? %i\n
- \1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: variety
- \1- ReturnExpr: <void>
- |18- SepExpr (Consumed=2)
- |19- TypeDecl:
- |- Head: TypeDeclHead: `PrimitiveOType` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=7)
- |0- DeclExpr: 'int variety'
- |1- DeclExpr: 'cstr name'
- |2- DeclExpr: 'Project proj'
- |3- DeclExpr: 'int size'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='PrimitiveOType::new' Type='OType' Nargs=3
- |0- cstr name
- |1- int v
- \2- int size
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'PrimitiveOType new'
- \- RHS: CastExpr (Target='PrimitiveOType')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(PrimitiveOType)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: name
- \- RHS: NameExpr: 'name'
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: variety
- \- RHS: NameExpr: 'v'
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: size
- \- RHS: NameExpr: 'size'
- \4- ReturnExpr: CastExpr (Target='OType')
- \- Value: NameExpr: 'new'
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='PrimitiveOType:get_size' Type='int' Nargs=1
- \0- PrimitiveOType t
- \0- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: size
- \6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='PrimitiveOType:print' Type='void' Nargs=1
- \0- PrimitiveOType t
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=5)
- |0- LiteralExpr: type=cstr, value=%i P %s\t%s\t %i bytes\n
- |1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: variety
- |2- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'datamodel'
- \- Field: variety_to_name
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: variety
- |3- AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: name
- \4- AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: size
- \1- ReturnExpr: <void>
- |20- SepExpr (Consumed=2)
- |21- TypeDecl:
- |- Head: TypeDeclHead: `FPtrOType` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=7)
- |0- DeclExpr: 'int variety'
- |1- DeclExpr: 'cstr name'
- |2- DeclExpr: 'Project proj'
- |3- DeclExpr: 'OType return_value'
- |4- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FPtrOType::new' Type='OType' Nargs=2
- |0- cstr name
- \1- OType return_value
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'FPtrOType new'
- \- RHS: CastExpr (Target='FPtrOType')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(FPtrOType)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: name
- \- RHS: NameExpr: 'name'
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: variety
- \- RHS: NameExpr: 'F_PTR'
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: return_value
- \- RHS: NameExpr: 'return_value'
- \4- ReturnExpr: CastExpr (Target='OType')
- \- Value: NameExpr: 'new'
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FPtrOType:get_size' Type='int' Nargs=1
- \0- FPtrOType self
- \0- ReturnExpr: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: proj
- \- Field: pointer_size
- \6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='FPtrOType:print' Type='void' Nargs=1
- \0- FPtrOType t
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=5)
- |0- LiteralExpr: type=cstr, value=%i F %s\t%s\t-> %s\n
- |1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: variety
- |2- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'datamodel'
- \- Field: variety_to_name
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: variety
- |3- AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: name
- \4- AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: return_value
- \- Field: name
- \1- ReturnExpr: <void>
- |22- SepExpr (Consumed=2)
- |23- TypeDecl:
- |- Head: TypeDeclHead: `StructOType` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=1)
- \- Body: TypeDeclBody: (N_Statements=9)
- |0- DeclExpr: 'int variety'
- |1- DeclExpr: 'cstr name'
- |2- DeclExpr: 'Project proj'
- |3- DeclExpr: 'bool packed'
- |4- DeclExpr: 'List fields'
- |5- FunctionDecl:
- |- Head: FunctionDeclHead: Name='StructOType::new' Type='OType' Nargs=1
- \0- cstr name
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'StructOType new'
- \- RHS: CastExpr (Target='StructOType')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(StructOType)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: name
- \- RHS: NameExpr: 'name'
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: variety
- \- RHS: NameExpr: 'STRUCT'
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: fields
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'List'
- \- Field: new
- \- Arguments: (Len=0)
- |4- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'new'
- \- Field: packed
- \- RHS: LiteralExpr: type=bool, value=0
- \5- ReturnExpr: CastExpr (Target='OType')
- \- Value: NameExpr: 'new'
- |6- FunctionDecl:
- |- Head: FunctionDeclHead: Name='StructOType:get_field_type_by_pos' Type='OType' Nargs=2
- |0- StructOType self
- \1- int i
- \0- ReturnExpr: CastExpr (Target='OType')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: proj
- \- Field: get_type
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: CastExpr (Target='cstr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: fields
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: substr
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=int, value=0
- \1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: CastExpr (Target='cstr')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: fields
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: find
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=
- |7- FunctionDecl:
- |- Head: FunctionDeclHead: Name='StructOType:get_size' Type='int' Nargs=1
- \0- StructOType self
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int sum'
- \- RHS: LiteralExpr: type=int, value=0
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: fields
- \- Field: len
- |- Body: BlockBody: (N_Statements=2)
- |0- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: get_field_type_by_pos
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: is_struct
- \- Arguments: (Len=0)
- |- Body: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'sum'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'self'
- \- Field: proj
- \- Field: pointer_size
- \-- Runoff Clause: BlockBody: (N_Statements=1)
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'sum'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'self'
- \- Field: get_field_type_by_pos
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: get_size
- \- Arguments: (Len=0)
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- \3- ReturnExpr: NameExpr: 'sum'
- \8- FunctionDecl:
- |- Head: FunctionDeclHead: Name='StructOType:print' Type='void' Nargs=1
- \0- StructOType t
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=5)
- |0- LiteralExpr: type=cstr, value=%i S %s\t%s\t %i bytes {
- |1- AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: variety
- |2- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'datamodel'
- \- Field: variety_to_name
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: variety
- |3- AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: name
- \4- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: get_size
- \- Arguments: (Len=0)
- |1- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |2- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: fields
- \- Field: len
- |- Body: BlockBody: (N_Statements=3)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=2)
- |0- LiteralExpr: type=cstr, value=%s
- \1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: fields
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- |1- IfExpr:
- |- Condition: BinOpExpr (Operator='!=')
- |- LHS: NameExpr: 'i'
- \- RHS: BinOpExpr (Operator='-')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: fields
- \- Field: len
- \- RHS: LiteralExpr: type=int, value=1
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=,
- |2- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |3- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=}\n
- \4- ReturnExpr: <void>
- |24- SepExpr (Consumed=2)
- |25- FunctionDecl:
- |- Head: FunctionDeclHead: Name='shoc::datamodel::init_base' Type='void' Nargs=1
- \0- Project p
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'VOID'
- \- RHS: LiteralExpr: type=int, value=0
- |1- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'S_INT'
- \- RHS: LiteralExpr: type=int, value=1
- |2- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'U_INT'
- \- RHS: LiteralExpr: type=int, value=2
- |3- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'FLOAT'
- \- RHS: LiteralExpr: type=int, value=3
- |4- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'POINTER'
- \- RHS: LiteralExpr: type=int, value=4
- |5- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'F_PTR'
- \- RHS: LiteralExpr: type=int, value=5
- |6- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'STRUCT'
- \- RHS: LiteralExpr: type=int, value=6
- |7- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Type
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'PrimitiveOType$$new'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=int
- |1- NameExpr: 'S_INT'
- \2- LiteralExpr: type=int, value=4
- |8- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Type
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'PrimitiveOType$$new'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=short
- |1- NameExpr: 'S_INT'
- \2- LiteralExpr: type=int, value=2
- |9- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Type
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'PrimitiveOType$$new'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=byte
- |1- NameExpr: 'S_INT'
- \2- LiteralExpr: type=int, value=1
- |10- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Type
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'PrimitiveOType$$new'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=long
- |1- NameExpr: 'S_INT'
- \2- LiteralExpr: type=int, value=8
- |11- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Type
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'PrimitiveOType$$new'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=xlong
- |1- NameExpr: 'S_INT'
- \2- LiteralExpr: type=int, value=16
- |12- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Type
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'PrimitiveOType$$new'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=uint
- |1- NameExpr: 'U_INT'
- \2- LiteralExpr: type=int, value=4
- |13- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Type
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'PrimitiveOType$$new'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=ushort
- |1- NameExpr: 'U_INT'
- \2- LiteralExpr: type=int, value=2
- |14- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Type
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'PrimitiveOType$$new'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=ubyte
- |1- NameExpr: 'U_INT'
- \2- LiteralExpr: type=int, value=1
- |15- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Type
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'PrimitiveOType$$new'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=ulong
- |1- NameExpr: 'U_INT'
- \2- LiteralExpr: type=int, value=8
- |16- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Type
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'PrimitiveOType$$new'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=uxlong
- |1- NameExpr: 'U_INT'
- \2- LiteralExpr: type=int, value=16
- |17- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Type
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'PrimitiveOType$$new'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=float
- |1- NameExpr: 'FLOAT'
- \2- LiteralExpr: type=int, value=8
- |18- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Type
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'PrimitiveOType$$new'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=bool
- |1- NameExpr: 'U_INT'
- \2- LiteralExpr: type=int, value=1
- |19- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Type
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'PrimitiveOType$$new'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=ptr
- |1- NameExpr: 'POINTER'
- \2- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: pointer_size
- |20- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Type
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'PrimitiveOType$$new'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=cstr
- |1- NameExpr: 'POINTER'
- \2- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: pointer_size
- |21- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: add_Type
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: NameExpr: 'PrimitiveOType$$new'
- \- Arguments: (Len=3)
- |0- LiteralExpr: type=cstr, value=void
- |1- NameExpr: 'VOID'
- \2- LiteralExpr: type=int, value=0
- \22- ReturnExpr: <void>
- |26- SepExpr (Consumed=2)
- |27- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:get_type' Type='OType' Nargs=2
- |0- Project p
- \1- cstr name
- \0- ReturnExpr: CastExpr (Target='OType')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: types
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'name'
- |28- SepExpr (Consumed=1)
- |10- SepExpr (Consumed=4)
- |11- FunctionDecl:
- |- Head: FunctionDeclHead: Name='shoc::bail_out' Type='void' Nargs=1
- \0- cstr err
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\n\nshoc::bail_out called, orth::fail traceback follows...\n
- |1- CallExpr:
- |- Method: NameExpr: 'orth$$fail'
- \- Arguments: (Len=1)
- \0- NameExpr: 'err'
- \2- ReturnExpr: <void>
- |12- SepExpr (Consumed=4)
- |13- TypeDecl:
- |- Head: TypeDeclHead: `Project` (Is_Func_Alias=0, Is_Type_Alias:0, Is_Packed=0)
- \- Body: TypeDeclBody: (N_Statements=8)
- |0- DeclExpr: 'List token_types'
- |1- DeclExpr: 'List node_types'
- |2- DeclExpr: 'List transformer_passes'
- |3- DeclExpr: 'StrMap options'
- |4- DeclExpr: 'int pointer_size'
- |5- DeclExpr: 'StrMap types'
- |6- DeclExpr: 'List search_path'
- \7- DeclExpr: 'List included_files'
- |14- SepExpr (Consumed=4)
- |15- FunctionDecl:
- |- Head: FunctionDeclHead: Name='shoc::get_empty_project' Type='Project' Nargs=0
- |0- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'Project p'
- \- RHS: CastExpr (Target='Project')
- \- Value: CallExpr:
- |- Method: NameExpr: 'malloc'
- \- Arguments: (Len=1)
- \0- IntrinsicExpr: '@sizeof(Project)@'
- |1- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: token_types
- \- RHS: CallExpr:
- |- Method: NameExpr: 'List$$new'
- \- Arguments: (Len=0)
- |2- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: node_types
- \- RHS: CallExpr:
- |- Method: NameExpr: 'List$$new'
- \- Arguments: (Len=0)
- |3- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: transformer_passes
- \- RHS: CallExpr:
- |- Method: NameExpr: 'List$$new'
- \- Arguments: (Len=0)
- |4- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: options
- \- RHS: CallExpr:
- |- Method: NameExpr: 'StrMap$$new'
- \- Arguments: (Len=0)
- |5- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: types
- \- RHS: CallExpr:
- |- Method: NameExpr: 'StrMap$$new'
- \- Arguments: (Len=0)
- |6- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: included_files
- \- RHS: CallExpr:
- |- Method: NameExpr: 'List$$new'
- \- Arguments: (Len=0)
- |7- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: search_path
- \- RHS: CallExpr:
- |- Method: NameExpr: 'List$$new'
- \- Arguments: (Len=0)
- \8- ReturnExpr: NameExpr: 'p'
- |16- SepExpr (Consumed=4)
- |17- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:with_base_tokens' Type='Project' Nargs=1
- \0- Project p
- |0- CallExpr:
- |- Method: NameExpr: 'lex$$init_default'
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: token_types
- \1- ReturnExpr: NameExpr: 'p'
- |18- SepExpr (Consumed=4)
- |19- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:with_base_grammar' Type='Project' Nargs=1
- \0- Project p
- |0- CallExpr:
- |- Method: NameExpr: 'parse$$init_default'
- \- Arguments: (Len=1)
- \0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: node_types
- \1- ReturnExpr: NameExpr: 'p'
- |20- SepExpr (Consumed=4)
- |21- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:with_base_passes' Type='Project' Nargs=1
- \0- Project p
- |0- CallExpr:
- |- Method: NameExpr: 'shoc$$transformers$$init'
- \- Arguments: (Len=1)
- \0- NameExpr: 'p'
- \1- ReturnExpr: NameExpr: 'p'
- |22- SepExpr (Consumed=4)
- |23- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:with_base_types' Type='Project' Nargs=1
- \0- Project p
- |0- CallExpr:
- |- Method: NameExpr: 'shoc$$datamodel$$init_base'
- \- Arguments: (Len=1)
- \0- NameExpr: 'p'
- \1- ReturnExpr: NameExpr: 'p'
- |24- SepExpr (Consumed=4)
- |25- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:with_search_path' Type='Project' Nargs=2
- |0- Project p
- \1- List l
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: search_path
- \- RHS: NameExpr: 'l'
- \1- ReturnExpr: NameExpr: 'p'
- |26- SepExpr (Consumed=4)
- |27- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:with_options' Type='Project' Nargs=2
- |0- Project p
- \1- StrMap l
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: options
- \- RHS: NameExpr: 'l'
- \1- ReturnExpr: NameExpr: 'p'
- |28- SepExpr (Consumed=4)
- |29- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:with_arch_bits' Type='Project' Nargs=2
- |0- Project p
- \1- int bits
- |0- AssignmentExpr (Operator='=')
- |- LHS: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: pointer_size
- \- RHS: BinOpExpr (Operator='/')
- |- LHS: NameExpr: 'bits'
- \- RHS: LiteralExpr: type=int, value=8
- \1- ReturnExpr: NameExpr: 'p'
- |30- SepExpr (Consumed=4)
- |31- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:add_Transformer' Type='void' Nargs=2
- |0- Project p
- \1- TransformerPass t
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: transformer_passes
- \- Field: append
- \- Arguments: (Len=1)
- \0- CastExpr (Target='ptr')
- \- Value: NameExpr: 't'
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: set_project
- \- Arguments: (Len=1)
- \0- NameExpr: 'p'
- \2- ReturnExpr: <void>
- |32- SepExpr (Consumed=4)
- |33- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:add_Type' Type='void' Nargs=2
- |0- Project p
- \1- OType t
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: types
- \- Field: set
- \- Arguments: (Len=2)
- |0- AccessorExpr (Mode='.')
- |- Object: NameExpr: 't'
- \- Field: name
- \1- CastExpr (Target='ptr')
- \- Value: NameExpr: 't'
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 't'
- \- Field: set_project
- \- Arguments: (Len=1)
- \0- NameExpr: 'p'
- \2- ReturnExpr: <void>
- |34- SepExpr (Consumed=4)
- |35- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:run_only_import' Type='Node' Nargs=2
- |0- Project p
- \1- Node n
- \0- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CastExpr (Target='TransformerPass')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'p'
- \- Field: transformer_passes
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=0
- \- Field: visit
- \- Arguments: (Len=1)
- \0- NameExpr: 'n'
- |36- SepExpr (Consumed=4)
- |37- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:process_text' Type='Node' Nargs=2
- |0- Project p
- \1- cstr text
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'text'
- \- RHS: LiteralExpr: type=cstr, value=\n
- \1- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: run_only_import
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: parse
- \- Arguments: (Len=2)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: tokenize
- \- Arguments: (Len=1)
- \0- NameExpr: 'text'
- \1- NameExpr: 'text'
- |38- SepExpr (Consumed=4)
- |39- FunctionDecl:
- |- Head: FunctionDeclHead: Name='Project:process_project' Type='Node' Nargs=2
- |0- Project p
- \1- cstr text
- |0- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'text'
- \- RHS: LiteralExpr: type=cstr, value=\n
- \1- ReturnExpr: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: run_transformers
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: parse
- \- Arguments: (Len=2)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'p'
- \- Field: tokenize
- \- Arguments: (Len=1)
- \0- NameExpr: 'text'
- \1- NameExpr: 'text'
- |40- SepExpr (Consumed=1)
- |9- FunctionDeclHead: Name='main' Type='int' Nargs=2
- |0- int nargs
- \1- ArgList args
- |10- CallExpr:
- |- Method: NameExpr: 'mem$$init_arena_allocator'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1048576
- |11- CallExpr:
- |- Method: NameExpr: 'orth$$install_sigsev_handler'
- \- Arguments: (Len=0)
- |12- CallExpr:
- |- Method: NameExpr: 'stdio$$init'
- \- Arguments: (Len=0)
- |13- IfExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'nargs'
- \- RHS: LiteralExpr: type=int, value=2
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'orth$$fail'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=E: Bad args\n
- |14- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'List search_path'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'List$$new'
- \- Arguments: (Len=0)
- |15- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'search_path'
- \- Field: append
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=.
- |16- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'StrMap options'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'StrMap$$new'
- \- Arguments: (Len=0)
- |17- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=1
- |18- DeclExpr: 'cstr arg'
- |19- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: NameExpr: 'nargs'
- |- Body: BlockBody: (N_Statements=4)
- |0- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'arg'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'args'
- \- Field: get
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- |1- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'arg'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=-s
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'search_path'
- \- Field: append
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'arg'
- \- Field: offset
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- |2- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'arg'
- \- Field: startswith
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=-f
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'options'
- \- Field: set
- \- Arguments: (Len=2)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'arg'
- \- Field: offset
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=2
- \1- LiteralExpr: type=cstr, value=1
- |3- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |20- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'options'
- \- Field: contains
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=profile
- \- Field: or
- \- Arguments: (Len=1)
- \0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'options'
- \- Field: contains
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=profile_dump_csv
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: NameExpr: 'orth$$internal$$profile$$install_profiler'
- \- Arguments: (Len=0)
- |21- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'File fd'
- \- RHS: CallExpr:
- |- Method: NameExpr: 'File$$open'
- \- Arguments: (Len=2)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'args'
- \- Field: get
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=1
- \1- LiteralExpr: type=cstr, value=r
- |22- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'cstr contents'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'fd'
- \- Field: readall
- \- Arguments: (Len=0)
- |23- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'fd'
- \- Field: close
- \- Arguments: (Len=0)
- |24- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'Project proj'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: CallExpr:
- |- Method: NameExpr: 'shoc$$get_empty_project'
- \- Arguments: (Len=0)
- \- Field: with_base_tokens
- \- Arguments: (Len=0)
- \- Field: with_base_grammar
- \- Arguments: (Len=0)
- \- Field: with_base_passes
- \- Arguments: (Len=0)
- \- Field: with_arch_bits
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=int, value=64
- \- Field: with_base_types
- \- Arguments: (Len=0)
- \- Field: with_search_path
- \- Arguments: (Len=1)
- \0- NameExpr: 'search_path'
- \- Field: with_options
- \- Arguments: (Len=1)
- \0- NameExpr: 'options'
- |25- NameExpr: 'Node'
- |26- AssignmentExpr (Operator='=')
- |- LHS: NameExpr: 'node'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'proj'
- \- Field: process_project
- \- Arguments: (Len=1)
- \0- NameExpr: 'contents'
- |27- FunctionBody: (N_Statements=8)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'node'
- \- Field: print_root
- \- Arguments: (Len=0)
- |1- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\n\n
- |2- AssignmentExpr (Operator='=')
- |- LHS: DeclExpr: 'int i'
- \- RHS: LiteralExpr: type=int, value=0
- |3- WhileExpr:
- |- Condition: BinOpExpr (Operator='<')
- |- LHS: NameExpr: 'i'
- \- RHS: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'proj'
- \- Field: types
- \- Field: num_keys
- \- Arguments: (Len=0)
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: GroupingExpr: CastExpr (Target='OType')
- \- Value: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: AccessorExpr (Mode='.')
- |- Object: NameExpr: 'proj'
- \- Field: types
- \- Field: get_by_num
- \- Arguments: (Len=1)
- \0- NameExpr: 'i'
- \- Field: print
- \- Arguments: (Len=0)
- |1- AssignmentExpr (Operator='+=')
- |- LHS: NameExpr: 'i'
- \- RHS: LiteralExpr: type=int, value=1
- |4- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'options'
- \- Field: contains
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=dump_node_types
- |- Body: BlockBody: (N_Statements=2)
- |0- CallExpr:
- |- Method: NameExpr: 'printf'
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=\n\n\n
- |1- CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'proj'
- \- Field: show_types
- \- Arguments: (Len=0)
- |5- IfExpr:
- |- Condition: CallExpr:
- |- Method: AccessorExpr (Mode=':')
- |- Object: NameExpr: 'options'
- \- Field: contains
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=profile_dump_csv
- |- Body: BlockBody: (N_Statements=1)
- |0- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: AccessorExpr (Mode='::')
- |- Object: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'orth'
- \- Field: internal
- \- Field: profile
- \- Field: dump_profiling_data_csv
- \- Arguments: (Len=1)
- \0- LiteralExpr: type=cstr, value=profile.csv
- |6- CallExpr:
- |- Method: AccessorExpr (Mode='::')
- |- Object: NameExpr: 'mem'
- \- Field: clean_up
- \- Arguments: (Len=0)
- \7- ReturnExpr: LiteralExpr: type=int, value=0
- 1 P S_INT int 4 bytes
- 1 P S_INT short 2 bytes
- 1 P S_INT byte 1 bytes
- 1 P S_INT long 8 bytes
- 1 P S_INT xlong 16 bytes
- 2 P U_INT uint 4 bytes
- 2 P U_INT ushort 2 bytes
- 2 P U_INT ubyte 1 bytes
- 2 P U_INT ulong 8 bytes
- 2 P U_INT uxlong 16 bytes
- 3 P FLOAT float 8 bytes
- 2 P U_INT bool 1 bytes
- 4 P POINTER ptr 8 bytes
- 4 P POINTER cstr 8 bytes
- 0 P VOID void 0 bytes
- 6 S STRUCT _STDReadIntBox 4 bytes {int i}
- 6 S STRUCT MemArena 40 bytes {ptr allocation, int position, ptr last_alloc, int last_alloc_amount, int arena_size, int layer_id, MemArena _next}
- 6 S STRUCT _StackNode 24 bytes {_StackNode _next, _StackNode _prev, cstr name}
- 6 S STRUCT File 27 bytes {cstr path, cstr mode, bool writable, bool reached_eof, bool closed, ptr _file}
- 6 S STRUCT Box_cstr 8 bytes {cstr val}
- 6 S STRUCT Box_int 4 bytes {int val}
- 6 S STRUCT Box_short 2 bytes {short val}
- 6 S STRUCT Box_bool 1 bytes {bool val}
- 6 S STRUCT Box_long 8 bytes {long val}
- 6 S STRUCT Box_ptr 8 bytes {ptr val}
- 6 S STRUCT _ArgList_CStrBox 8 bytes {cstr str}
- 6 S STRUCT ArgList 0 bytes {}
- 6 S STRUCT _ProfileEntry 56 bytes {_ProfileEntry _next, cstr fname, long total_time, long exclusive_time, long exc_entry_time, long tot_entry_time, int stack_count, int entrance_count}
- 6 S STRUCT LinkedListNode 16 bytes {ptr value, LinkedListNode next}
- 6 S STRUCT ListCacheBox 8 bytes {LinkedListNode node}
- 6 S STRUCT List 22 bytes {int len, LinkedListNode head, ptr cache, bool cache_ready, bool cache_alloced}
- 6 S STRUCT TokenType 37 bytes {cstr name, int simple_type, cstr simple_text, TokenMatcher func, List preceeded_opts, bool produce_token}
- 6 S STRUCT Token 28 bytes {cstr text, TokenType type_, cstr origin_file, int origin_line}
- 6 S STRUCT ProgressBar 26 bytes {int last_update, int steps, int out_of, int step, cstr text, bool reverse, bool finished}
- 6 S STRUCT MapEntry 16 bytes {cstr key, ptr value}
- 6 S STRUCT StrMap 0 bytes {}
- 6 S STRUCT TransformerPass 3 2 bytes {cstr name, StrMap visitor_map, ptr extra_info, Project proj}
- 6 S STRUCT Node 8 bytes {NodeType type_}
- 6 S STRUCT Element 9 bytes {bool is_token, ptr thing}
- 6 S STRUCT EleList 12 bytes {int position, List list}
- 6 S STRUCT NodeType 64 bytes {cstr name, List things_i_am, NodePrinter printer, NodeDeleter deleter, NodeCreator creator, NodeVisitor child_visitor, int matcher_flags, int matcher_count, NodeMatcher matcher}
- 6 S STRUCT AccessorExpr 32 bytes {NodeType type_, cstr mode, Node object, cstr field}
- 6 S STRUCT AssignmentExpr 32 bytes {NodeType type_, cstr op, Node lhs, Node rhs}
- 6 S STRUCT BinOpExpr 32 bytes {NodeType type_, cstr op, Node lhs, Node rhs}
- 6 S STRUCT BlockBody 25 bytes {NodeType type_, List statements, bool has_runoff_clause, Node runoff_clause}
- 6 S STRUCT CallExpr 24 bytes {NodeType type_, Node meth, List args}
- 6 S STRUCT CastExpr 24 bytes {NodeType type_, Node value, cstr target}
- 6 S STRUCT FunctionDeclHead 32 bytes {NodeType type_, List args, cstr name, cstr ret_type}
- 6 S STRUCT FunctionBody 16 bytes {NodeType type_, List statements}
- 6 S STRUCT FunctionDecl 24 bytes {NodeType type_, FunctionDeclHead head, List body}
- 6 S STRUCT ZeroArgList 8 bytes {NodeType type_}
- 6 S STRUCT OneArgList 16 bytes {NodeType type_, cstr text}
- 6 S STRUCT MultiArgListStart 16 bytes {NodeType type_, cstr text}
- 6 S STRUCT MultiArgListExt 16 bytes {NodeType type_, List args}
- 6 S STRUCT MultiArgList 16 bytes {NodeType type_, List args}
- 6 S STRUCT GroupingExpr 16 bytes {NodeType type_, Node contents}
- 6 S STRUCT IfExprHead 17 bytes {NodeType type_, Node condition, bool is_elif}
- 6 S STRUCT IfExpr 25 bytes {NodeType type_, Node condition, bool is_elif, BlockBody body}
- 6 S STRUCT ImportStmt 16 bytes {NodeType type_, cstr name}
- 6 S STRUCT IndexExpr 24 bytes {NodeType type_, Node value, Node array}
- 6 S STRUCT IntrinsicExpr 16 bytes {NodeType type_, cstr name}
- 6 S STRUCT LiteralExpr 24 bytes {NodeType type_, cstr value, cstr value_type}
- 6 S STRUCT NameExpr 16 bytes {NodeType type_, cstr name}
- 6 S STRUCT DeclExpr 16 bytes {NodeType type_, cstr name}
- 6 S STRUCT ReturnExpr 17 bytes {NodeType type_, bool is_void, Node value}
- 6 S STRUCT SepExpr 12 bytes {NodeType type_, int consumed}
- 6 S STRUCT TupleEndFragment 16 bytes {NodeType type_, Node element}
- 6 S STRUCT TupleMidFragment 16 bytes {NodeType type_, List elements}
- 6 S STRUCT Tuple 16 bytes {NodeType type_, List elements}
- 6 S STRUCT ZeroTuple 8 bytes {NodeType type_}
- 6 S STRUCT OneTuple 16 bytes {NodeType type_, Node element}
- 6 S STRUCT TypeDeclHead 27 bytes {NodeType type_, cstr name, bool is_type_alias, bool is_func_alias, bool packed, cstr alias_type}
- 6 S STRUCT TypeDeclBody 16 bytes {NodeType type_, List statements}
- 6 S STRUCT TypeDecl 24 bytes {NodeType type_, TypeDeclHead head, TypeDeclBody body}
- 6 S STRUCT UnOpExpr 24 bytes {NodeType type_, cstr op, Node value}
- 6 S STRUCT WhileExpr 24 bytes {NodeType type_, Node condition, BlockBody body}
- 6 S STRUCT FileNode 16 bytes {NodeType type_, List statements}
- 6 S STRUCT OType 20 bytes {int variety, cstr name, Project proj}
- 6 S STRUCT PrimitiveOType 24 bytes {int variety, cstr name, Project proj, int size}
- 6 S STRUCT FPtrOType 28 bytes {int variety, cstr name, Project proj, OType return_value}
- 6 S STRUCT StructOType 29 bytes {int variety, cstr name, Project proj, bool packed, List fields}
- 6 S STRUCT Project 60 bytes {List token_types, List node_types, List transformer_passes, StrMap options, int pointer_size, StrMap types, List search_path, List included_files}
- 5 F F_PTR MemAllocator 8 bytes -> ptr
- 5 F F_PTR MemDeallocator 8 bytes -> void
- 5 F F_PTR MemCleaner 8 bytes -> void
- 5 F F_PTR AddtlEnterExitCallback 8 bytes -> void
- 5 F F_PTR SignalHandler 8 bytes -> void
- 5 F F_PTR TokenMatcher 8 bytes -> int
- 5 F F_PTR NodeTransformer 8 bytes -> Node
- 5 F F_PTR NodeDeleter 8 bytes -> void
- 5 F F_PTR NodePrinter 8 bytes -> void
- 5 F F_PTR NodeVisitor 8 bytes -> void
- 5 F F_PTR NodeCreator 8 bytes -> Node
- 5 F F_PTR NodeMatcher 8 bytes -> int
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement