halunke 0.9.0 → 0.10.1
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/.ruby-version +1 -0
- data/.woodpecker/test.yml +9 -0
- data/Dockerfile +6 -6
- data/Gemfile +11 -1
- data/Gemfile.lock +74 -13
- data/README.md +1 -1
- data/Rakefile +6 -1
- data/docs/Gemfile +1 -0
- data/docs/Gemfile.lock +176 -164
- data/docs/_layouts/default.html +1 -19
- data/docs/index.md +4 -4
- data/docs/stdio.md +1 -1
- data/docs/web.md +1 -1
- data/exe/halunke +8 -3
- data/halunke.gemspec +3 -7
- data/lib/halunke/grammar.y +7 -3
- data/lib/halunke/herror.rb +9 -0
- data/lib/halunke/nodes.rb +75 -31
- data/lib/halunke/parser.rb +720 -72
- data/lib/halunke/runtime/hclass.rb +11 -2
- data/lib/halunke/runtime/hregexp.rb +1 -1
- data/lib/halunke/runtime/hweb.rb +6 -6
- data/lib/halunke/tokenizer.rb +8 -9
- data/lib/halunke/tokenizer.rl +1 -2
- data/lib/halunke/version.rb +1 -1
- metadata +20 -64
- data/.travis.yml +0 -5
|
@@ -39,12 +39,15 @@ module Halunke
|
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
context[name] = HClass.new(name, allowed_attributes, instance_methods, class_methods, false)
|
|
42
|
+
rescue FrozenError
|
|
43
|
+
assigned_value = context[name].inspect(context)
|
|
44
|
+
raise HBarewordAlreadyAssigned.new("Bareword '#{name} is already assigned to #{assigned_value}. In Halunke, you can only assign once.", message_value[0].source_code_position)
|
|
42
45
|
end
|
|
43
46
|
|
|
44
47
|
private
|
|
45
48
|
|
|
46
|
-
def determine_name(
|
|
47
|
-
|
|
49
|
+
def determine_name(unassigned_bareword)
|
|
50
|
+
unassigned_bareword.ruby_value
|
|
48
51
|
end
|
|
49
52
|
|
|
50
53
|
def determine_allowed_attributes(harray)
|
|
@@ -64,6 +67,12 @@ module Halunke
|
|
|
64
67
|
})
|
|
65
68
|
}
|
|
66
69
|
hdictionary.ruby_value.each_pair do |method_name, fn|
|
|
70
|
+
raise HInvalidMessageName.new("Message name must be a String", method_name.source_code_position) unless method_name.runtime_class.name == "String"
|
|
71
|
+
raise HInvalidMessageName.new("An empty String is not a valid message", method_name.source_code_position) if method_name.ruby_value == ""
|
|
72
|
+
raise HInvalidMessageName.new("A message can't start with a space", method_name.source_code_position) if method_name.ruby_value.start_with? " "
|
|
73
|
+
raise HInvalidMessageName.new("A message can't stop with a space", method_name.source_code_position) if method_name.ruby_value.end_with? " "
|
|
74
|
+
raise HInvalidMessageName.new("The parts of the message need to be separated by a single space", method_name.source_code_position) if method_name.ruby_value.match(/ {2,}/)
|
|
75
|
+
|
|
67
76
|
instance_methods[method_name.ruby_value] = fn
|
|
68
77
|
end
|
|
69
78
|
instance_methods
|
|
@@ -26,7 +26,7 @@ module Halunke
|
|
|
26
26
|
context["self"].receive_message(
|
|
27
27
|
context,
|
|
28
28
|
"new",
|
|
29
|
-
[HDictionary.create_instance(HString.create_instance("string") => context["str"])]
|
|
29
|
+
[HDictionary.create_instance({HString.create_instance("string") => context["str"]})]
|
|
30
30
|
)
|
|
31
31
|
})
|
|
32
32
|
},
|
data/lib/halunke/runtime/hweb.rb
CHANGED
|
@@ -5,17 +5,17 @@ module Halunke
|
|
|
5
5
|
[],
|
|
6
6
|
{
|
|
7
7
|
"run on" => HFunction.new([:self, :app, :host_port], lambda { |context|
|
|
8
|
-
require "
|
|
8
|
+
require "rackup"
|
|
9
9
|
|
|
10
10
|
host, port = context["host_port"].ruby_value.split(":")
|
|
11
11
|
|
|
12
12
|
# TODO: Body, Headers
|
|
13
|
-
|
|
14
|
-
henv = context["Dictionary"].create_instance(
|
|
13
|
+
Rackup::Handler::WEBrick.run(lambda { |env|
|
|
14
|
+
henv = context["Dictionary"].create_instance({
|
|
15
15
|
context["String"].create_instance("request_method") => context["String"].create_instance(env["REQUEST_METHOD"]),
|
|
16
16
|
context["String"].create_instance("path") => context["String"].create_instance(env["PATH_INFO"]),
|
|
17
17
|
context["String"].create_instance("query") => context["String"].create_instance(env["QUERY_STRING"])
|
|
18
|
-
)
|
|
18
|
+
})
|
|
19
19
|
result = context["app"].receive_message(context, "call", [henv]).ruby_value
|
|
20
20
|
|
|
21
21
|
status = result[0].ruby_value
|
|
@@ -27,8 +27,8 @@ module Halunke
|
|
|
27
27
|
|
|
28
28
|
body = result[2].ruby_value.map(&:ruby_value)
|
|
29
29
|
|
|
30
|
-
[status, headers, body]
|
|
31
|
-
},
|
|
30
|
+
[status.to_i, headers, body]
|
|
31
|
+
}, Host: host, Port: port)
|
|
32
32
|
|
|
33
33
|
env["host_port"]
|
|
34
34
|
}),
|
data/lib/halunke/tokenizer.rb
CHANGED
|
@@ -156,11 +156,10 @@ self.tokenizer_en_main = 2;
|
|
|
156
156
|
end
|
|
157
157
|
|
|
158
158
|
def tokenize(data)
|
|
159
|
-
data.chomp
|
|
160
|
-
eof = data.length
|
|
159
|
+
eof = data.chomp.length
|
|
161
160
|
|
|
162
161
|
|
|
163
|
-
# line
|
|
162
|
+
# line 163 "lib/halunke/tokenizer.rb"
|
|
164
163
|
begin
|
|
165
164
|
p ||= 0
|
|
166
165
|
pe ||= data.length
|
|
@@ -170,9 +169,9 @@ begin
|
|
|
170
169
|
act = 0
|
|
171
170
|
end
|
|
172
171
|
|
|
173
|
-
# line
|
|
172
|
+
# line 54 "lib/halunke/tokenizer.rl"
|
|
174
173
|
|
|
175
|
-
# line
|
|
174
|
+
# line 175 "lib/halunke/tokenizer.rb"
|
|
176
175
|
begin
|
|
177
176
|
_klen, _trans, _keys, _acts, _nacts = nil
|
|
178
177
|
_goto_level = 0
|
|
@@ -202,7 +201,7 @@ begin
|
|
|
202
201
|
begin
|
|
203
202
|
ts = p
|
|
204
203
|
end
|
|
205
|
-
# line
|
|
204
|
+
# line 205 "lib/halunke/tokenizer.rb"
|
|
206
205
|
end # from state action switch
|
|
207
206
|
end
|
|
208
207
|
if _trigger_goto
|
|
@@ -406,7 +405,7 @@ when 24 then
|
|
|
406
405
|
raise "Could not lex '#{ data[ts...te] }'" end
|
|
407
406
|
end
|
|
408
407
|
end
|
|
409
|
-
# line
|
|
408
|
+
# line 409 "lib/halunke/tokenizer.rb"
|
|
410
409
|
end # action switch
|
|
411
410
|
end
|
|
412
411
|
end
|
|
@@ -426,7 +425,7 @@ when 0 then
|
|
|
426
425
|
# line 1 "NONE"
|
|
427
426
|
begin
|
|
428
427
|
ts = nil; end
|
|
429
|
-
# line
|
|
428
|
+
# line 429 "lib/halunke/tokenizer.rb"
|
|
430
429
|
end # to state action switch
|
|
431
430
|
end
|
|
432
431
|
if _trigger_goto
|
|
@@ -453,7 +452,7 @@ end
|
|
|
453
452
|
end
|
|
454
453
|
end
|
|
455
454
|
|
|
456
|
-
# line
|
|
455
|
+
# line 55 "lib/halunke/tokenizer.rl"
|
|
457
456
|
|
|
458
457
|
@tokens
|
|
459
458
|
end
|
data/lib/halunke/tokenizer.rl
CHANGED
data/lib/halunke/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,99 +1,56 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: halunke
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.10.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Lucas Dohmen
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
13
|
+
name: rackup
|
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
|
16
15
|
requirements:
|
|
17
16
|
- - "~>"
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 2.
|
|
18
|
+
version: '2.3'
|
|
20
19
|
type: :runtime
|
|
21
20
|
prerelease: false
|
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
22
|
requirements:
|
|
24
23
|
- - "~>"
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 2.
|
|
25
|
+
version: '2.3'
|
|
27
26
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
27
|
+
name: webrick
|
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
|
30
29
|
requirements:
|
|
31
|
-
- - "
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: 0.10.1
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - "~>"
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: 0.10.1
|
|
41
|
-
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: bundler
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
44
|
-
requirements:
|
|
45
|
-
- - "~>"
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: 1.17.2
|
|
48
|
-
type: :development
|
|
49
|
-
prerelease: false
|
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
-
requirements:
|
|
52
|
-
- - "~>"
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
version: 1.17.2
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: rake
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - "~>"
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: 12.3.2
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - "~>"
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: 12.3.2
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: minitest
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - "~>"
|
|
30
|
+
- - ">="
|
|
74
31
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
76
|
-
type: :
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :runtime
|
|
77
34
|
prerelease: false
|
|
78
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
36
|
requirements:
|
|
80
|
-
- - "
|
|
37
|
+
- - ">="
|
|
81
38
|
- !ruby/object:Gem::Version
|
|
82
|
-
version:
|
|
39
|
+
version: '0'
|
|
83
40
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
41
|
+
name: reline
|
|
85
42
|
requirement: !ruby/object:Gem::Requirement
|
|
86
43
|
requirements:
|
|
87
|
-
- - "
|
|
44
|
+
- - ">="
|
|
88
45
|
- !ruby/object:Gem::Version
|
|
89
|
-
version:
|
|
90
|
-
type: :
|
|
46
|
+
version: '0'
|
|
47
|
+
type: :runtime
|
|
91
48
|
prerelease: false
|
|
92
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
50
|
requirements:
|
|
94
|
-
- - "
|
|
51
|
+
- - ">="
|
|
95
52
|
- !ruby/object:Gem::Version
|
|
96
|
-
version:
|
|
53
|
+
version: '0'
|
|
97
54
|
description: A dynamic OO language with ideas traditionally described as "functional"
|
|
98
55
|
email:
|
|
99
56
|
- lucas@dohmen.io
|
|
@@ -104,7 +61,8 @@ extra_rdoc_files: []
|
|
|
104
61
|
files:
|
|
105
62
|
- ".editorconfig"
|
|
106
63
|
- ".gitignore"
|
|
107
|
-
- ".
|
|
64
|
+
- ".ruby-version"
|
|
65
|
+
- ".woodpecker/test.yml"
|
|
108
66
|
- CODE_OF_CONDUCT.md
|
|
109
67
|
- Dockerfile
|
|
110
68
|
- Gemfile
|
|
@@ -168,7 +126,6 @@ homepage: http://halunke.jetzt
|
|
|
168
126
|
licenses:
|
|
169
127
|
- MIT
|
|
170
128
|
metadata: {}
|
|
171
|
-
post_install_message:
|
|
172
129
|
rdoc_options: []
|
|
173
130
|
require_paths:
|
|
174
131
|
- lib
|
|
@@ -183,8 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
183
140
|
- !ruby/object:Gem::Version
|
|
184
141
|
version: '0'
|
|
185
142
|
requirements: []
|
|
186
|
-
rubygems_version:
|
|
187
|
-
signing_key:
|
|
143
|
+
rubygems_version: 4.0.18
|
|
188
144
|
specification_version: 4
|
|
189
145
|
summary: The Halunke programming language
|
|
190
146
|
test_files: []
|