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 +4 -4
- data/lib/sdx/compiler/compiler.rb +3 -0
- data/lib/sdx/compiler/parser.rb +15 -0
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b6cb7504c3a8d3c20d609b052304da6f29006b61d4606b738fe0a33fc92753c8
|
|
4
|
+
data.tar.gz: 573d3b61d0031f2c1016ab4ba6d8b856f6ba8770e19b93610080735fb01efabf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f8d4f48ba42b07b7bc29a367cb67492c7ca7f0c481f7556a2cecb28d2085be081330ebc3040469cadee489db420f015c2bf31969a2818f3b285ec24c0d101b4f
|
|
7
|
+
data.tar.gz: d6569e3d3607dfc50628b72952195e44289ac642412804330b54f82d8b6e3ad3afb863888a8f80c57e736c73e02f9bbee25f033a76dda87845d869753c4dbf9d
|
data/lib/sdx/compiler/parser.rb
CHANGED
|
@@ -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
|