spitewaste 0.1.007 → 0.1.012
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/Rakefile +5 -3
- data/lib/spitewaste.rb +2 -0
- data/lib/spitewaste/assembler.rb +48 -3
- data/lib/spitewaste/cli/docs.rb +2 -2
- data/lib/spitewaste/libspw/array.spw +31 -2
- data/lib/spitewaste/libspw/docs.json +5540 -1
- data/lib/spitewaste/libspw/fun.spw +21 -0
- data/lib/spitewaste/libspw/math.spw +6 -2
- data/lib/spitewaste/libspw/random.spw +4 -0
- data/lib/spitewaste/libspw/rational.spw +48 -0
- data/lib/spitewaste/libspw/string.spw +41 -8
- data/lib/spitewaste/libspw/terminal.spw +14 -0
- data/lib/spitewaste/libspw/test.spw +2 -3
- data/lib/spitewaste/libspw/util.spw +113 -19
- data/lib/spitewaste/parsers/fucktional.rb +7 -3
- data/lib/spitewaste/parsers/spitewaste.rb +13 -7
- data/lib/spitewaste/version.rb +1 -1
- metadata +3 -2
@@ -11,7 +11,7 @@ module Spitewaste
|
|
11
11
|
INSTRUCTIONS = /(\S+):|(\b(#{OPERATORS_M2T.keys * ?|})\s+(-?\d\S*)?)/
|
12
12
|
SPECIAL_INSN = /(call|jump|jz|jn)\s+(\S+)/
|
13
13
|
|
14
|
-
attr_reader :src, :instructions, :error
|
14
|
+
attr_reader :src, :instructions, :error, :symbol_table
|
15
15
|
|
16
16
|
def initialize program, **options
|
17
17
|
@src = program.dup
|
@@ -57,14 +57,14 @@ module Spitewaste
|
|
57
57
|
private
|
58
58
|
|
59
59
|
def preprocess!
|
60
|
-
@src
|
60
|
+
@src << "\nimport syntax"
|
61
61
|
resolve_imports
|
62
62
|
seed_prng if @seen.include? 'random'
|
63
63
|
resolve_strings
|
64
|
-
remove_comments
|
65
64
|
add_sugar
|
66
|
-
|
65
|
+
remove_comments
|
67
66
|
propagate_macros
|
67
|
+
fucktionalize
|
68
68
|
end
|
69
69
|
|
70
70
|
def resolve_imports
|
@@ -78,7 +78,13 @@ module Spitewaste
|
|
78
78
|
while @src['import']
|
79
79
|
imports = []
|
80
80
|
@src.gsub!(/import\s+(\S+).*/) {
|
81
|
-
|
81
|
+
if $1 == ?*
|
82
|
+
imports = Dir[LIBSPW + '/*.spw'].map {
|
83
|
+
File.read(_1) if @seen.add? File.basename(_1, '.spw')
|
84
|
+
}
|
85
|
+
else
|
86
|
+
imports << resolve($1) if @seen.add? $1
|
87
|
+
end
|
82
88
|
'' # remove import statement
|
83
89
|
}
|
84
90
|
@src << imports.join(?\n)
|
@@ -91,7 +97,7 @@ module Spitewaste
|
|
91
97
|
end
|
92
98
|
|
93
99
|
def seed_prng
|
94
|
-
@src.prepend "push $seed,#{rand 2**31} store $seed = -9001"
|
100
|
+
@src.prepend "push $seed,#{rand 2**31} store $seed = -9001\n"
|
95
101
|
end
|
96
102
|
|
97
103
|
def resolve_strings
|
@@ -160,7 +166,7 @@ module Spitewaste
|
|
160
166
|
subroutines = {}
|
161
167
|
while label = tokens.shift
|
162
168
|
sublen = tokens.index { |t| t[/:$/] } || tokens.size
|
163
|
-
subroutines[label.chop]
|
169
|
+
subroutines[label.chop] ||= tokens.shift sublen
|
164
170
|
end
|
165
171
|
|
166
172
|
# A subroutine may indirectly depend on the one immediately after by
|
data/lib/spitewaste/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spitewaste
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.012
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Collided Scope (collidedscope)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -110,6 +110,7 @@ files:
|
|
110
110
|
- lib/spitewaste/libspw/stack.spw
|
111
111
|
- lib/spitewaste/libspw/string.spw
|
112
112
|
- lib/spitewaste/libspw/syntax.spw
|
113
|
+
- lib/spitewaste/libspw/terminal.spw
|
113
114
|
- lib/spitewaste/libspw/test.spw
|
114
115
|
- lib/spitewaste/libspw/util.spw
|
115
116
|
- lib/spitewaste/parsers/assembly.rb
|