sardonyx 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5d369226413f552c8f1cb2fc20675a4364c2d4ec03f7b22897c341567a6da09e
4
- data.tar.gz: a39fb4fb82a76ea92c4799e3a5b51f52c62d7dfd853402a0e83877b790bda36c
3
+ metadata.gz: b6cb7504c3a8d3c20d609b052304da6f29006b61d4606b738fe0a33fc92753c8
4
+ data.tar.gz: 573d3b61d0031f2c1016ab4ba6d8b856f6ba8770e19b93610080735fb01efabf
5
5
  SHA512:
6
- metadata.gz: 9714fee82b1115876a3533a4e9cf9cb82875f6c0b4e2749ceeb1fc63218b262364e52cfd0e4649c8b1f825206a1772572033fe2d6f569f88fa1def58477f3e30
7
- data.tar.gz: 858e1cffdf236a2ef9fb14e7af794d68b6ca83c9724ef05b02c65d7ce2ba73954e808ace033d8423fe52f9dde6ebbc54c56adc6036bc177b6a9ce4888711ae69
6
+ metadata.gz: f8d4f48ba42b07b7bc29a367cb67492c7ca7f0c481f7556a2cecb28d2085be081330ebc3040469cadee489db420f015c2bf31969a2818f3b285ec24c0d101b4f
7
+ data.tar.gz: d6569e3d3607dfc50628b72952195e44289ac642412804330b54f82d8b6e3ad3afb863888a8f80c57e736c73e02f9bbee25f033a76dda87845d869753c4dbf9d
@@ -197,6 +197,9 @@ module Compiler
197
197
  bc += self.encode_node item
198
198
  end
199
199
  bc += "\x21\x2c#{node.children.size}\x18"
200
+ when :return
201
+ bc += self.encode_node node.value
202
+ bc += "\x16"
200
203
  else
201
204
  nil
202
205
  end
@@ -23,6 +23,7 @@ module Parser
23
23
  /\Aobject/ => :object,
24
24
  /\Anew/ => :new,
25
25
  /\Arequire/ => :require,
26
+ /\Areturn/ => :return,
26
27
  /\A(true|false)/ => :bool,
27
28
  /\A-?[0-9]+\.[0-9]+/ => :float,
28
29
  /\A-?[0-9]+/ => :number,
@@ -674,11 +675,24 @@ Invalid code at #{line}:#{col}
674
675
  end
675
676
  [ (Node.new :require, tokens[0][0][1..-2], []), 2 ]
676
677
  end
678
+
679
+ def self.parse_return(tokens)
680
+ unless self.expect tokens, :return
681
+ return nil
682
+ end
683
+ tokens = tokens[1..-1]
684
+ res = self.parse_expr tokens
685
+ unless res
686
+ return nil
687
+ end
688
+ [ (Node.new :return, res[0], []), res[1] ]
689
+ end
677
690
 
678
691
  def self.parse_expr(tokens)
679
692
  (self.parse_op tokens) ||
680
693
  (self.parse_call tokens) ||
681
694
  (self.parse_require tokens) ||
695
+ (self.parse_return tokens) ||
682
696
  (self.parse_new tokens) ||
683
697
  (self.parse_object tokens) ||
684
698
  (self.parse_fn tokens) ||
@@ -706,6 +720,7 @@ Invalid code at #{line}:#{col}
706
720
  unless code
707
721
  error "Cannot find file #{e[0].value}.sdx anywhere in path"
708
722
  State::state = :error
723
+ return nil
709
724
  end
710
725
  tokens = tokens[e[1]..-1]
711
726
  lexed, _ = Lexer.lex code
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sardonyx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - sugarfi