sardonyx 0.3.0 → 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: 7f1875caf3dde857e8ceb08f571c7c880dbca87ac78ab47db76cc892e651170a
4
- data.tar.gz: 4a09ccbebfd19876454ffb9de6576352f4a1a536f5a953d93c884b1aa94a1bbb
3
+ metadata.gz: b6cb7504c3a8d3c20d609b052304da6f29006b61d4606b738fe0a33fc92753c8
4
+ data.tar.gz: 573d3b61d0031f2c1016ab4ba6d8b856f6ba8770e19b93610080735fb01efabf
5
5
  SHA512:
6
- metadata.gz: 8eec611286cae7b68737ed8616b34db4eaf2e810c74591ef7809fec452c0987760298011757519748b1fee1a90641b2f76e860b3e32e1f0add69cc0cc1242125
7
- data.tar.gz: 4d08a6dfe6066f4c0d9a98a0d428baf23a1190831c64b3a4b3530c43a41e3dd18065d70a8fc9331617a2234402aeacca92afae7a74d75aebb1c84f44d9aa45b3
6
+ metadata.gz: f8d4f48ba42b07b7bc29a367cb67492c7ca7f0c481f7556a2cecb28d2085be081330ebc3040469cadee489db420f015c2bf31969a2818f3b285ec24c0d101b4f
7
+ data.tar.gz: d6569e3d3607dfc50628b72952195e44289ac642412804330b54f82d8b6e3ad3afb863888a8f80c57e736c73e02f9bbee25f033a76dda87845d869753c4dbf9d
data/bin/sdx CHANGED
@@ -5,6 +5,10 @@ require "sdx/vm/vm"
5
5
  require "stringio"
6
6
  require "readline"
7
7
 
8
+ if (ENV.fetch("SDX_PATH", "").split ":") == []
9
+ puts "\x1b[0;33mLooks like you don't have anything in your SDX_PATH! You should install the stdlib at https://github.com/SardonyxLang/SardonyxStd.\x1b[0;0m"
10
+ end
11
+
8
12
  if ARGV.size == 1
9
13
  path = [(File.expand_path File.dirname ARGV[0]), *(ENV.fetch("SDX_PATH", "").split ":")]
10
14
  code = File.read ARGV[0]
@@ -18,7 +22,7 @@ if ARGV.size == 1
18
22
  else
19
23
  path = [(File.expand_path Dir.pwd), *(ENV.fetch("SDX_PATH", "").split ":")]
20
24
  vm = VM.new StringIO.new ""
21
- puts "Sardonyx v0.3.0"
25
+ puts "Sardonyx v0.3.4"
22
26
  puts "Type :help for help, or :exit to exit"
23
27
  loop do
24
28
  begin
@@ -47,7 +51,7 @@ else
47
51
  val = vm.stack[-1]
48
52
  vm.clear
49
53
  if val
50
- puts vm.stringify val
54
+ puts stringify val
51
55
  end
52
56
  end
53
57
  end
@@ -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,14 +720,15 @@ 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
- lexed = Lexer.lex code
711
- ast = self.parse lexed, path, (code.split "\n")
712
- parsed.concat ast
725
+ tokens = tokens[e[1]..-1]
726
+ lexed, _ = Lexer.lex code
727
+ tokens = [*lexed, *tokens]
713
728
  else
714
729
  parsed << e[0]
730
+ tokens = tokens[e[1]..-1]
715
731
  end
716
- tokens = tokens[e[1]..-1]
717
732
  else
718
733
  error %{
719
734
  Unexpected token #{tokens[0][1]} at #{tokens[0][2]}:#{tokens[0][3]}
@@ -14,6 +14,18 @@ def codify(val)
14
14
  end
15
15
  end
16
16
 
17
+ def stringify(val)
18
+ if val.value.fields["__as_string"]
19
+ if val.value.fields["__as_string"].respond_to? :fields
20
+ (val.value.fields["__as_string"].fields["__call"].call [], val.scope).internal
21
+ else
22
+ (val.value.fields["__as_string"]).call.internal
23
+ end
24
+ else
25
+ val.value.to_s
26
+ end
27
+ end
28
+
17
29
  class VM
18
30
  attr_accessor :bc_io
19
31
 
@@ -28,14 +40,6 @@ class VM
28
40
  return true
29
41
  end
30
42
  end
31
-
32
- def stringify(val)
33
- if val.value.fields["__as_string"]
34
- (call val.value.fields["__as_string"], [], val.scope).internal
35
- else
36
- val.value.to_s
37
- end
38
- end
39
43
 
40
44
  def call(val, *args)
41
45
  if val.respond_to? :value and val.value.respond_to? :fields
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.0
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - sugarfi