halunke 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/docs/CNAME +1 -0
- data/docs/_config.yml +0 -2
- data/docs/_layouts/default.html +15 -12
- data/docs/array.md +13 -0
- data/docs/index.md +7 -0
- data/halunke.gemspec +1 -1
- data/lib/halunke/interpreter.rb +1 -0
- data/lib/halunke/runtime.rb +1 -0
- data/lib/halunke/runtime/harray.rb +5 -0
- data/lib/halunke/runtime/hclass.rb +1 -1
- data/lib/halunke/runtime/hregexp.rb +30 -0
- data/lib/halunke/runtime/hstring.rb +11 -0
- data/lib/halunke/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 611b6eded86f2cd9eba6b40582ef203160280782
|
4
|
+
data.tar.gz: a80ebee17d3997bc197f79739c7ee872a1f94340
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 737f95c019feaddc4f00971de2f3976271dd27cd037405459de1108547ac14304a66a4996c25ef741ce6a0c9c7ec17f2df0d173cae20ed2f31a03d7ce75fd95d
|
7
|
+
data.tar.gz: a92aa49019b18f1dafa0ab784d853ca2184ec694848f8f813875f94b4a09af1ea02b33673acffd88d226b5a6bafb0ae518ce51e9bee7e54a2628ae6a9e9c39f1
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -14,7 +14,7 @@ It also has the following characteristics:
|
|
14
14
|
|
15
15
|
* There is no null/nil value in the language
|
16
16
|
|
17
|
-
Find out more on the [documentation page](
|
17
|
+
Find out more on the [documentation page](http://halunke.jetzt).
|
18
18
|
|
19
19
|
## License
|
20
20
|
|
data/docs/CNAME
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
halunke.jetzt
|
data/docs/_config.yml
CHANGED
data/docs/_layouts/default.html
CHANGED
@@ -9,48 +9,51 @@
|
|
9
9
|
</head>
|
10
10
|
<body>
|
11
11
|
<div class="container">
|
12
|
-
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
13
|
-
<a class="navbar-brand" href="/
|
12
|
+
<nav class="navbar navbar-expand-lg navbar-dark bg-dark mb-1">
|
13
|
+
<a class="navbar-brand" href="/">Halunke!</a>
|
14
14
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
15
15
|
<span class="navbar-toggler-icon"></span>
|
16
16
|
</button>
|
17
17
|
<div class="collapse navbar-collapse" id="navbarNav">
|
18
18
|
<ul class="navbar-nav">
|
19
19
|
<li class="nav-item">
|
20
|
-
<a class="nav-link" href="/
|
20
|
+
<a class="nav-link" href="/">Intro</a>
|
21
21
|
</li>
|
22
22
|
<li class="nav-item">
|
23
|
-
<a class="nav-link" href="/
|
23
|
+
<a class="nav-link" href="/number">Number</a>
|
24
24
|
</li>
|
25
25
|
<li class="nav-item">
|
26
|
-
<a class="nav-link" href="/
|
26
|
+
<a class="nav-link" href="/string">String</a>
|
27
27
|
</li>
|
28
28
|
<li class="nav-item">
|
29
|
-
<a class="nav-link" href="/
|
29
|
+
<a class="nav-link" href="/array">Array</a>
|
30
30
|
</li>
|
31
31
|
<li class="nav-item">
|
32
|
-
<a class="nav-link" href="/
|
32
|
+
<a class="nav-link" href="/dictionary">Dictionary</a>
|
33
33
|
</li>
|
34
34
|
<li class="nav-item">
|
35
|
-
<a class="nav-link" href="/
|
35
|
+
<a class="nav-link" href="/true-false">True & False</a>
|
36
36
|
</li>
|
37
37
|
<li class="nav-item">
|
38
|
-
<a class="nav-link" href="/
|
38
|
+
<a class="nav-link" href="/function">Function</a>
|
39
39
|
</li>
|
40
40
|
<li class="nav-item">
|
41
|
-
<a class="nav-link" href="/
|
41
|
+
<a class="nav-link" href="/class">Class</a>
|
42
42
|
</li>
|
43
43
|
<li class="nav-item">
|
44
|
-
<a class="nav-link" href="/
|
44
|
+
<a class="nav-link" href="/stdio">Stdio</a>
|
45
45
|
</li>
|
46
46
|
<li class="nav-item">
|
47
|
-
<a class="nav-link" href="/
|
47
|
+
<a class="nav-link" href="/web">Web</a>
|
48
48
|
</li>
|
49
49
|
</ul>
|
50
50
|
</div>
|
51
51
|
</nav>
|
52
52
|
|
53
53
|
<header>
|
54
|
+
<div class="alert alert-primary" role="alert">
|
55
|
+
Halunke is Open Source and on <a href="http://github.com/moonglum/halunke">Github. <a href="http://try.halunke.jetzt">Try out Halunke online!</a>
|
56
|
+
</div>
|
54
57
|
<h1>{{ page.title }}</h1>
|
55
58
|
</header>
|
56
59
|
<main>
|
data/docs/array.md
CHANGED
@@ -44,6 +44,19 @@ length with the results of the function calls.
|
|
44
44
|
([0 1 2] map { |'x| (x + 1) }) /* => [1 2 3] */
|
45
45
|
```
|
46
46
|
|
47
|
+
## `find else`
|
48
|
+
|
49
|
+
Calls the provided function for each element. Returns the first element for
|
50
|
+
which the function returns true. If none of the calls returns true, it will
|
51
|
+
return the fallback value.
|
52
|
+
|
53
|
+
**Example:**
|
54
|
+
|
55
|
+
```
|
56
|
+
(["a" "b" "c"] find { |'el| (el = "a") } else "not found")
|
57
|
+
/* => "a" */
|
58
|
+
```
|
59
|
+
|
47
60
|
## `to_s`
|
48
61
|
|
49
62
|
This returns a string to represent the array in output.
|
data/docs/index.md
CHANGED
@@ -27,6 +27,13 @@ gem install halunke
|
|
27
27
|
|
28
28
|
You can start a REPL with `halunke` or run a file with `halunke file.hal`.
|
29
29
|
|
30
|
+
Alternatively (if you don't have Ruby installed for example), you
|
31
|
+
can run it with Docker:
|
32
|
+
|
33
|
+
```
|
34
|
+
docker run --rm -ti bascht/halunke
|
35
|
+
```
|
36
|
+
|
30
37
|
## How it works
|
31
38
|
|
32
39
|
In Halunke, everything is an object. And you can send messages to Objects.
|
data/halunke.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
|
|
11
11
|
|
12
12
|
spec.summary = %q{The Halunke programming language}
|
13
13
|
spec.description = %q{A dynamic OO language with ideas traditionally described as "functional"}
|
14
|
-
spec.homepage = "
|
14
|
+
spec.homepage = "http://halunke.jetzt"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
17
17
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
data/lib/halunke/interpreter.rb
CHANGED
@@ -17,6 +17,7 @@ module Halunke
|
|
17
17
|
@root_context["Array"] = Halunke::Runtime::HArray
|
18
18
|
@root_context["Dictionary"] = Halunke::Runtime::HDictionary
|
19
19
|
@root_context["UnassignedBareword"] = Halunke::Runtime::HUnassignedBareword
|
20
|
+
@root_context["Regexp"] = Halunke::Runtime::HRegexp
|
20
21
|
@root_context["stdio"] = Halunke::Runtime::HStdio.create_instance
|
21
22
|
@root_context["web"] = Halunke::Runtime::HWeb.create_instance
|
22
23
|
|
data/lib/halunke/runtime.rb
CHANGED
@@ -18,6 +18,11 @@ module Halunke
|
|
18
18
|
context["fn"].receive_message(context, "call", [HArray.create_instance([x])])
|
19
19
|
end)
|
20
20
|
}),
|
21
|
+
"find else" => HFunction.new([:self, :search_fn, :fallback], lambda { |context|
|
22
|
+
context["self"].ruby_value.find(-> { context["fallback"] }) do |element|
|
23
|
+
context["search_fn"].receive_message(context, "call", [HArray.create_instance([element])]) == context["true"]
|
24
|
+
end
|
25
|
+
}),
|
21
26
|
"to_s" => HFunction.new([:self], lambda { |context|
|
22
27
|
inspected_members = context["self"].ruby_value.map do |member|
|
23
28
|
member.receive_message(context, "to_s", []).ruby_value
|
@@ -56,7 +56,7 @@ module Halunke
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def receive_message(context, message_name, message_value)
|
59
|
-
if message_name == "new"
|
59
|
+
if message_name == "new" && !native?
|
60
60
|
create_instance(message_value[0])
|
61
61
|
elsif @class_methods.keys.include? message_name
|
62
62
|
m = @class_methods[message_name]
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Halunke
|
2
|
+
module Runtime
|
3
|
+
HRegexp = HClass.new(
|
4
|
+
"Regexp",
|
5
|
+
[],
|
6
|
+
{
|
7
|
+
"inspect" => HFunction.new([:self, :attr], lambda { |context|
|
8
|
+
HString.create_instance(context["self"].ruby_value.inspect)
|
9
|
+
})
|
10
|
+
},
|
11
|
+
{
|
12
|
+
"new" => HFunction.new([:self, :attr], lambda { |context|
|
13
|
+
str = (context["attr"].ruby_value.find do |key, _value|
|
14
|
+
key.ruby_value == "string"
|
15
|
+
end)[1].ruby_value
|
16
|
+
|
17
|
+
HRegexp.create_instance(Regexp.new(str))
|
18
|
+
}),
|
19
|
+
"from" => HFunction.new([:self, :str], lambda { |context|
|
20
|
+
context["self"].receive_message(
|
21
|
+
context,
|
22
|
+
"new",
|
23
|
+
[HDictionary.create_instance(HString.create_instance("string") => context["str"])]
|
24
|
+
)
|
25
|
+
})
|
26
|
+
},
|
27
|
+
true
|
28
|
+
)
|
29
|
+
end
|
30
|
+
end
|
@@ -14,6 +14,17 @@ module Halunke
|
|
14
14
|
)
|
15
15
|
HString.create_instance(result)
|
16
16
|
}),
|
17
|
+
"match" => HFunction.new([:self, :regexp], lambda { |context|
|
18
|
+
match_data = context["self"].ruby_value.match(context["regexp"].ruby_value)
|
19
|
+
h = {}
|
20
|
+
match_data.named_captures.each_pair do |key, value|
|
21
|
+
h[HString.create_instance(key)] = HString.create_instance(value)
|
22
|
+
end
|
23
|
+
match_data.to_a.each_with_index do |value, key|
|
24
|
+
h[HString.create_instance(key)] = HString.create_instance(value)
|
25
|
+
end
|
26
|
+
HDictionary.create_instance(h)
|
27
|
+
}),
|
17
28
|
"=" => HFunction.new([:self, :other], lambda { |context|
|
18
29
|
if context["self"].ruby_value == context["other"].ruby_value
|
19
30
|
context["true"]
|
data/lib/halunke/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: halunke
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lucas Dohmen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -100,6 +100,7 @@ files:
|
|
100
100
|
- bin/console
|
101
101
|
- bin/setup
|
102
102
|
- docs/.gitignore
|
103
|
+
- docs/CNAME
|
103
104
|
- docs/Gemfile
|
104
105
|
- docs/Gemfile.lock
|
105
106
|
- docs/_config.yml
|
@@ -136,13 +137,14 @@ files:
|
|
136
137
|
- lib/halunke/runtime/hnative_object.rb
|
137
138
|
- lib/halunke/runtime/hnumber.rb
|
138
139
|
- lib/halunke/runtime/hobject.rb
|
140
|
+
- lib/halunke/runtime/hregexp.rb
|
139
141
|
- lib/halunke/runtime/hstdio.rb
|
140
142
|
- lib/halunke/runtime/hstring.rb
|
141
143
|
- lib/halunke/runtime/hunassigned_bareword.rb
|
142
144
|
- lib/halunke/runtime/hweb.rb
|
143
145
|
- lib/halunke/runtime/true.hal
|
144
146
|
- lib/halunke/version.rb
|
145
|
-
homepage:
|
147
|
+
homepage: http://halunke.jetzt
|
146
148
|
licenses:
|
147
149
|
- MIT
|
148
150
|
metadata: {}
|