nasl 0.0.8 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/README.md +11 -16
  4. data/Rakefile +38 -0
  5. data/bin/nasl-parse +1 -1
  6. data/lib/nasl.rb +1 -1
  7. data/lib/nasl/cli.rb +1 -1
  8. data/lib/nasl/command.rb +1 -1
  9. data/lib/nasl/commands/benchmark.rb +1 -1
  10. data/lib/nasl/commands/parse.rb +1 -1
  11. data/lib/nasl/commands/test.rb +1 -1
  12. data/lib/nasl/commands/tokenize.rb +1 -1
  13. data/lib/nasl/commands/xml.rb +1 -1
  14. data/lib/nasl/context.rb +5 -5
  15. data/lib/nasl/grammar.racc +104 -16
  16. data/lib/nasl/parser.rb +1 -1
  17. data/lib/nasl/parser/argument.rb +1 -1
  18. data/lib/nasl/parser/array.rb +51 -0
  19. data/lib/nasl/parser/assigment.rb +1 -1
  20. data/lib/nasl/parser/block.rb +7 -1
  21. data/lib/nasl/parser/break.rb +2 -2
  22. data/lib/nasl/parser/call.rb +3 -2
  23. data/lib/nasl/parser/comment.rb +2 -2
  24. data/lib/nasl/parser/continue.rb +2 -2
  25. data/lib/nasl/parser/decrement.rb +1 -1
  26. data/lib/nasl/parser/empty.rb +2 -2
  27. data/lib/nasl/parser/export.rb +1 -1
  28. data/lib/nasl/parser/expression.rb +1 -1
  29. data/lib/nasl/parser/for.rb +2 -2
  30. data/lib/nasl/parser/foreach.rb +4 -4
  31. data/lib/nasl/parser/function.rb +1 -1
  32. data/lib/nasl/parser/global.rb +1 -1
  33. data/lib/nasl/parser/identifier.rb +7 -2
  34. data/lib/nasl/parser/if.rb +2 -2
  35. data/lib/nasl/parser/import.rb +1 -1
  36. data/lib/nasl/parser/include.rb +2 -2
  37. data/lib/nasl/parser/increment.rb +1 -1
  38. data/lib/nasl/parser/integer.rb +7 -2
  39. data/lib/nasl/parser/ip.rb +2 -2
  40. data/lib/nasl/parser/key_value_pair.rb +43 -0
  41. data/lib/nasl/parser/list.rb +41 -0
  42. data/lib/nasl/parser/local.rb +1 -1
  43. data/lib/nasl/parser/lvalue.rb +1 -1
  44. data/lib/nasl/parser/node.rb +2 -2
  45. data/lib/nasl/parser/parameter.rb +43 -0
  46. data/lib/nasl/parser/reference.rb +41 -0
  47. data/lib/nasl/parser/repeat.rb +1 -1
  48. data/lib/nasl/parser/repetition.rb +1 -1
  49. data/lib/nasl/parser/return.rb +2 -2
  50. data/lib/nasl/parser/string.rb +7 -2
  51. data/lib/nasl/parser/tree.rb +2 -2
  52. data/lib/nasl/parser/undefined.rb +2 -2
  53. data/lib/nasl/parser/while.rb +1 -1
  54. data/lib/nasl/test.rb +1 -1
  55. data/lib/nasl/token.rb +2 -2
  56. data/lib/nasl/tokenizer.rb +7 -4
  57. data/lib/nasl/version.rb +27 -1
  58. data/nasl.gemspec +35 -8
  59. data/test/unit/parser/test_array.rb +174 -0
  60. data/test/unit/parser/test_assignment.rb +75 -4
  61. data/test/unit/parser/test_blank.rb +1 -1
  62. data/test/unit/parser/test_block.rb +29 -1
  63. data/test/unit/parser/test_call.rb +57 -5
  64. data/test/unit/parser/test_comment.rb +1 -1
  65. data/test/unit/parser/test_constant.rb +1 -1
  66. data/test/unit/parser/test_empty.rb +1 -1
  67. data/test/unit/parser/test_expressions.rb +8 -1
  68. data/test/unit/parser/test_foreach.rb +43 -0
  69. data/test/unit/parser/test_function.rb +147 -51
  70. data/test/unit/parser/test_global.rb +49 -0
  71. data/test/unit/parser/test_if.rb +3 -3
  72. data/test/unit/parser/test_include.rb +1 -1
  73. data/test/unit/parser/test_incr_decr.rb +1 -1
  74. data/test/unit/parser/test_ip.rb +1 -1
  75. data/test/unit/parser/test_list.rb +42 -0
  76. data/test/unit/parser/test_local.rb +49 -0
  77. data/test/unit/parser/test_return.rb +7 -3
  78. data/test/unit/parser/test_string.rb +1 -1
  79. data/test/unit/parser/test_whitespace.rb +1 -1
  80. data/test/unit/test_context.rb +1 -1
  81. data/test/unit/tokenizer/test_comment.rb +1 -1
  82. data/test/unit/tokenizer/test_empty.rb +1 -1
  83. data/test/unit/tokenizer/test_integer.rb +1 -1
  84. data/test/unit/tokenizer/test_references.rb +41 -0
  85. data/test/unit/tokenizer/test_string.rb +2 -1
  86. metadata +49 -86
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f1211036372f4f6f5cf6638769d1de8d46720ffd
4
+ data.tar.gz: 996d639bae9ddda1394e59745c19eafaca51eb45
5
+ SHA512:
6
+ metadata.gz: d376f113cf2fead0955db0b34a56855128f6c8dee42999fbb4173857b649de5ffe31aa3db31129f1879af46ed6c73adb8a7381e46d92cebbb4ae078bca6b5c5d
7
+ data.tar.gz: 8c90427b235c11cfffae66f294125dfd2094af5fe8cce28701867d84a9e9de95cfc5cba2bf33206cc3eb9b8e49556405a5293fdabac50bb2e9075af956239345
data/.gitignore CHANGED
@@ -7,3 +7,8 @@ pkg/*
7
7
  # Generated files.
8
8
  *.rex.rb
9
9
  *.tab.rb
10
+
11
+ # Backup files.
12
+ \#*\#
13
+ *~
14
+ *.bak
data/README.md CHANGED
@@ -1,32 +1,28 @@
1
- Installation
2
- ============
1
+ # Installation
3
2
 
4
- Git
5
- ---
3
+ ## Git
6
4
 
7
5
  Installing the source from Git is done as follows:
8
6
 
9
7
  git clone git://github.com/tenable/nasl.git
10
8
 
11
- Gem
12
- ---
9
+ ## Gem
10
+
13
11
 
14
12
  Installing the package from RubyGems is done as follows:
15
13
 
16
14
  gem install nasl
17
15
 
18
- Usage
19
- =====
16
+ # Usage
20
17
 
21
- Standalone
22
- ----------
18
+ ## Standalone
23
19
 
24
20
  To avoid conflicting with the NASL interpreter, the NASL gem's binary is
25
- installed as <nasl-parse>. As an application, it has very few actions that it
21
+ installed as `nasl-parse`. As an application, it has very few actions that it
26
22
  can perform.
27
23
 
28
24
  * Benchmark: This benchmarks the time taken to parse the input path(s) over a
29
- number of iterations. The number of iterations can be adjusted by the <-i>
25
+ number of iterations. The number of iterations can be adjusted by the `-i`
30
26
  switch.
31
27
 
32
28
  % nasl-parse -i 10 benchmark /opt/nessus/lib/nessus/plugins/ssl_certificate_chain.nasl
@@ -89,11 +85,10 @@ can perform.
89
85
  ...
90
86
  -------------------------[ ssl_certificate_chain.nasl ]-------------------------
91
87
 
92
- Library
93
- -------
88
+ # Library
94
89
 
95
90
  The primary users of this gem are [Pedant][pedant] and [Nasldoc][nasldoc]. Other
96
- uses are encouraged, of course! The <Parser> class is the most useful part,
91
+ uses are encouraged, of course! The `Parser` class is the most useful part,
97
92
  obviously, and can be used as follows:
98
93
 
99
94
  require 'nasl'
@@ -101,7 +96,7 @@ obviously, and can be used as follows:
101
96
  tree = Nasl::Parser.new.parse(file_contents, path_to_file)
102
97
 
103
98
  That's all there is to it. If there are any errors, it'll throw an instance of
104
- <ParseException> that will include as much context about the error as possible.
99
+ `ParseException` that will include as much context about the error as possible.
105
100
 
106
101
  [nasldoc]: https://github.com/tenable/nasldoc
107
102
  [pedant]: https://github.com/tenable/pedant
data/Rakefile CHANGED
@@ -1,3 +1,29 @@
1
+ ################################################################################
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # 1. Redistributions of source code must retain the above copyright notice, this
9
+ # list of conditions and the following disclaimer.
10
+ #
11
+ # 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
19
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
22
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
+ ################################################################################
26
+
1
27
  $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
2
28
 
3
29
  require 'bundler/gem_tasks'
@@ -24,4 +50,16 @@ task :build => :compile do
24
50
  system "gem build nasl.gemspec"
25
51
  end
26
52
 
53
+ task :tag_and_bag do
54
+ system "git tag -a v#{Nasl::VERSION} -m 'version #{Nasl::VERSION}'"
55
+ system "git push --tags"
56
+ system "git checkout master"
57
+ system "git merge #{Nasl::VERSION}"
58
+ system "git push"
59
+ end
60
+
61
+ task :release => [:tag_and_bag, :build] do
62
+ system "gem push #{Nasl::APP_NAME}-#{Nasl::VERSION}.gem"
63
+ end
64
+
27
65
  task :default => :compile
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  ################################################################################
4
- # Copyright (c) 2011-2012, Mak Kolybabi
4
+ # Copyright (c) 2011-2014, Tenable Network Security
5
5
  # All rights reserved.
6
6
  #
7
7
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ###############################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Mak Kolybabi
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ###############################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Mak Kolybabi
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ###############################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Mak Kolybabi
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ###############################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Mak Kolybabi
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
- ###############################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
1
+ ################################################################################
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -86,18 +86,18 @@ module Nasl
86
86
  # no text to the left is at the start of the program.
87
87
  if outer.begin != inner.begin
88
88
  line = @code[outer.begin...inner.begin]
89
- line = line.color(:green) if color
89
+ line = Rainbow(line).color(:green) if color
90
90
  ctx << line
91
91
  end
92
92
 
93
93
  # Create the text in the region.
94
94
  line = @code[inner.begin...inner.end]
95
- line = line.color(:red) if color
95
+ line = Rainbow(line).color(:red) if color
96
96
  ctx << line
97
97
 
98
98
  # Create the text to the right of the region.
99
99
  line = @code[inner.end...outer.end].chomp
100
- line = line.color(:green) if color
100
+ line = Rainbow(line).color(:green) if color
101
101
  ctx << line
102
102
 
103
103
  ctx << "\n"
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -33,7 +33,7 @@ preclow
33
33
  left CMP_LT CMP_GT CMP_EQ CMP_NE CMP_GE CMP_LE SUBSTR_EQ SUBSTR_NE REGEX_EQ REGEX_NE
34
34
  left BIT_OR
35
35
  left BIT_XOR
36
- left BIT_AND
36
+ left AMPERSAND
37
37
  left BIT_SRA BIT_SRL BIT_SLL
38
38
  left ADD SUB
39
39
  left MUL DIV MOD
@@ -174,7 +174,7 @@ rule
174
174
  { n(:Empty, *val) }
175
175
  ;
176
176
 
177
- global : GLOBAL idents SEMICOLON
177
+ global : GLOBAL var_decls SEMICOLON
178
178
  { n(:Global, *val) }
179
179
  ;
180
180
 
@@ -190,7 +190,7 @@ rule
190
190
  { n(:Include, *val) }
191
191
  ;
192
192
 
193
- local : LOCAL idents SEMICOLON
193
+ local : LOCAL var_decls SEMICOLON
194
194
  { n(:Local, *val) }
195
195
  ;
196
196
 
@@ -199,6 +199,8 @@ rule
199
199
  ;
200
200
 
201
201
  return : RETURN expr SEMICOLON
202
+ { n(:Return, *val) }
203
+ | RETURN ref SEMICOLON
202
204
  { n(:Return, *val) }
203
205
  | RETURN SEMICOLON
204
206
  { n(:Return, *val) }
@@ -219,7 +221,9 @@ rule
219
221
  ;
220
222
 
221
223
  foreach : FOREACH ident LPAREN expr RPAREN statement
222
- { n(:Foreach, *val) }
224
+ { n(:Foreach, val[1], val[3], val[5]) }
225
+ | FOREACH LPAREN ident IN expr RPAREN statement
226
+ { n(:Foreach, val[2], val[4], val[6]) }
223
227
  ;
224
228
 
225
229
  if : IF LPAREN expr RPAREN statement
@@ -241,6 +245,8 @@ rule
241
245
  ##############################################################################
242
246
 
243
247
  assign_exp : lval ASS_EQ expr
248
+ { n(:Assignment, *val) }
249
+ | lval ASS_EQ ref
244
250
  { n(:Assignment, *val) }
245
251
  | lval ADD_EQ expr
246
252
  { n(:Assignment, *val) }
@@ -260,10 +266,11 @@ rule
260
266
  { n(:Assignment, *val) }
261
267
  ;
262
268
 
263
- call_exp : ident LPAREN args RPAREN
269
+ call_exp : lval LPAREN args RPAREN
264
270
  { n(:Call, *val) }
265
- | ident LPAREN RPAREN
271
+ | lval LPAREN RPAREN
266
272
  { n(:Call, *val) }
273
+ ;
267
274
 
268
275
  decr_exp : DECR lval
269
276
  { n(:Decrement, val[0]) }
@@ -301,7 +308,7 @@ rule
301
308
  { n(:Expression, *val) }
302
309
  | expr MOD expr
303
310
  { n(:Expression, *val) }
304
- | expr BIT_AND expr
311
+ | expr AMPERSAND expr
305
312
  { n(:Expression, *val) }
306
313
  | expr BIT_XOR expr
307
314
  { n(:Expression, *val) }
@@ -351,6 +358,10 @@ rule
351
358
  { val[0] }
352
359
  | undef
353
360
  { val[0] }
361
+ | list_expr
362
+ { val[0] }
363
+ | array_expr
364
+ { val[0] }
354
365
  ;
355
366
 
356
367
  ##############################################################################
@@ -358,9 +369,31 @@ rule
358
369
  ##############################################################################
359
370
 
360
371
  arg : ident COLON expr
372
+ { n(:Argument, *val) }
373
+ | ident COLON ref
361
374
  { n(:Argument, *val) }
362
375
  | expr
363
376
  { n(:Argument, *val) }
377
+ | ref
378
+ { n(:Argument, *val) }
379
+ ;
380
+
381
+ kv_pair : string COLON expr
382
+ { n(:KeyValuePair, *val) }
383
+ | int COLON expr
384
+ { n(:KeyValuePair, *val) }
385
+ | string COLON ref
386
+ { n(:KeyValuePair, *val) }
387
+ | int COLON ref
388
+ { n(:KeyValuePair, *val) }
389
+ ;
390
+
391
+ kv_pairs : kv_pair COMMA kv_pairs
392
+ { [val[0]] + val[2] }
393
+ | kv_pair COMMA
394
+ { [val[0]] }
395
+ | kv_pair
396
+ { [val[0]] }
364
397
  ;
365
398
 
366
399
  lval : ident indexes
@@ -369,6 +402,10 @@ rule
369
402
  { n(:Lvalue, *val) }
370
403
  ;
371
404
 
405
+ ref : AT_SIGN ident
406
+ { n(:Reference, val[1]) }
407
+ ;
408
+
372
409
  ##############################################################################
373
410
  # Anonymous Components
374
411
  ##############################################################################
@@ -379,6 +416,12 @@ rule
379
416
  { [val[0]] }
380
417
  ;
381
418
 
419
+ array_expr : LBRACE kv_pairs RBRACE
420
+ { n(:Array, *val) }
421
+ | LBRACE RBRACE
422
+ { n(:Array, *val) }
423
+ ;
424
+
382
425
  field : assign_exp
383
426
  { val[0] }
384
427
  | call_exp
@@ -391,21 +434,45 @@ rule
391
434
  { nil }
392
435
  ;
393
436
 
394
- idents : ident COMMA idents
395
- { [val[0]] + val[2] }
396
- | ident
437
+ index : LBRACK expr RBRACK
438
+ { val[1] }
439
+ | PERIOD ident
440
+ { val[1] }
441
+ ;
442
+
443
+ indexes : index indexes
444
+ { [val[0]] + val[1] }
445
+ | index
397
446
  { [val[0]] }
398
447
  ;
399
448
 
400
- indexes : LBRACK expr RBRACK indexes
401
- { [val[1]] + val[3] }
402
- | LBRACK expr RBRACK
403
- { [val[1]] }
449
+ list_elem : expr
450
+ { val[0] }
451
+ | ref
452
+ { val[0] }
404
453
  ;
405
454
 
406
- params : ident COMMA params
455
+ list_elems : list_elem COMMA list_elems
407
456
  { [val[0]] + val[2] }
457
+ | list_elem
458
+ { [val[0]] }
459
+ ;
460
+
461
+ list_expr : LBRACK list_elems RBRACK
462
+ { n(:List, *val) }
463
+ | LBRACK RBRACK
464
+ { n(:List, *val) }
465
+ ;
466
+
467
+ param : AMPERSAND ident
468
+ { n(:Parameter, val[1], 'reference') }
408
469
  | ident
470
+ { n(:Parameter, val[0], 'value') }
471
+ ;
472
+
473
+ params : param COMMA params
474
+ { [val[0]] + val[2] }
475
+ | param
409
476
  { [val[0]] }
410
477
  ;
411
478
 
@@ -415,6 +482,20 @@ rule
415
482
  { [val[0]] }
416
483
  ;
417
484
 
485
+ var_decl : ident ASS_EQ expr
486
+ { n(:Assignment, *val) }
487
+ | ident ASS_EQ ref
488
+ { n(:Assignment, *val) }
489
+ | ident
490
+ { val[0] }
491
+ ;
492
+
493
+ var_decls : var_decl COMMA var_decls
494
+ { [val[0]] + val[2] }
495
+ | var_decl
496
+ { [val[0]] }
497
+ ;
498
+
418
499
  ##############################################################################
419
500
  # Literals
420
501
  ##############################################################################
@@ -423,6 +504,8 @@ rule
423
504
  { n(:Identifier, *val) }
424
505
  | REP
425
506
  { n(:Identifier, *val) }
507
+ | IN
508
+ { n(:Identifier, *val) }
426
509
  ;
427
510
 
428
511
  int : INT_DEC
@@ -456,6 +539,7 @@ end
456
539
  require 'nasl/parser/tree'
457
540
 
458
541
  require 'nasl/parser/argument'
542
+ require 'nasl/parser/array'
459
543
  require 'nasl/parser/assigment'
460
544
  require 'nasl/parser/block'
461
545
  require 'nasl/parser/break'
@@ -477,8 +561,12 @@ require 'nasl/parser/include'
477
561
  require 'nasl/parser/increment'
478
562
  require 'nasl/parser/integer'
479
563
  require 'nasl/parser/ip'
564
+ require 'nasl/parser/key_value_pair'
565
+ require 'nasl/parser/list'
480
566
  require 'nasl/parser/local'
481
567
  require 'nasl/parser/lvalue'
568
+ require 'nasl/parser/parameter'
569
+ require 'nasl/parser/reference'
482
570
  require 'nasl/parser/repeat'
483
571
  require 'nasl/parser/repetition'
484
572
  require 'nasl/parser/return'