MCPcopy Index your code
hub / github.com/lmorg/murex / parseArray

Method parseArray

lang/expressions/parse_array.go:25–229  ·  view source on GitHub ↗
(exec bool)

Source from the content-addressed store, hash-verified

23}
24
25func (tree *ParserT) parseArray(exec bool) ([]rune, *primitives.DataType, error) {
26 var (
27 start = tree.charPos
28 slice = []any{}
29 )
30
31 // check if valid mkarray
32 dt, pos, err := tree.parseArrayMaker(exec)
33 if err != nil {
34 return nil, nil, err
35 }
36 if dt != nil {
37 tree.charPos--
38 return nil, dt, nil
39 }
40 tree.charPos = pos
41
42 for tree.charPos++; tree.charPos < len(tree.expression); tree.charPos++ {
43 r := tree.expression[tree.charPos]
44
45 switch r {
46 case '#':
47 tree.parseComment()
48
49 case '/':
50 // multiline comment
51 if tree.nextChar() == '#' {
52 if err := tree.parseCommentMultiLine(); err != nil {
53 return nil, nil, err
54 }
55 } else {
56 // string
57 value := tree.parseArrayBareword()
58 slice = append(slice, formatArrayValue(value))
59 }
60
61 case '\'', '"':
62 // quoted string
63 value, err := tree.parseString(r, r, exec)
64 if err != nil {
65 return nil, nil, err
66 }
67 slice = append(slice, string(value))
68 tree.charPos++
69
70 case '%':
71 switch tree.nextChar() {
72 case '[', '{':
73 // do nothing because action covered in the next iteration
74 case '(':
75 // start nested string
76 tree.charPos++
77 value, err := tree.parseParenthesis(exec)
78 if err != nil {
79 return nil, nil, err
80 }
81 slice = append(slice, string(value))
82 default:

Callers 4

parseObjectMethod · 0.95
createArrayAstMethod · 0.95
parseBlockQuoteMethod · 0.95

Calls 15

parseArrayMakerMethod · 0.95
parseCommentMethod · 0.95
nextCharMethod · 0.95
parseCommentMultiLineMethod · 0.95
parseArrayBarewordMethod · 0.95
parseStringMethod · 0.95
parseParenthesisMethod · 0.95
parseObjectMethod · 0.95
parseSubExpressionMethod · 0.95
parseSubShellMethod · 0.95
parseVarScalarMethod · 0.95
parseVarTildeMethod · 0.95

Tested by

no test coverage detected