This commit is contained in:
maxonfjvipon 2024-04-18 22:23:25 +03:00
parent 93cf383ffc
commit 7ca6646c30
No known key found for this signature in database
GPG Key ID: D8563899D473D273
17 changed files with 94 additions and 184 deletions

View File

@ -165,7 +165,7 @@ This is how you iterate:
x.times x x.times x
x.write x.write
x.plus 1 x.plus 1
TRUE true
``` ```
This code will print this: This code will print this:

View File

@ -29,4 +29,4 @@
[] > ensures-equality [] > ensures-equality
eq. > @ eq. > @
equality equality
TRUE true

View File

@ -81,4 +81,4 @@
[] > blah38 [] > blah38
blah39 > @ blah39 > @
[] > blah39 [] > blah39
TRUE > @ true > @

View File

@ -541,7 +541,6 @@ as : COLON (NAME | INT)
// Data // Data
data: BYTES data: BYTES
| BOOL
| TEXT | TEXT
| STRING | STRING
| INT | INT
@ -638,10 +637,6 @@ BYTES
| LINE_BYTES (MINUS EOL LINE_BYTES)* | LINE_BYTES (MINUS EOL LINE_BYTES)*
; ;
BOOL: 'TRUE'
| 'FALSE'
;
fragment ESCAPE_SEQUENCE fragment ESCAPE_SEQUENCE
: '\\' [btnfr"'\\] : '\\' [btnfr"'\\]
| '\\' ([0-3]? [0-7])? [0-7] | '\\' ([0-3]? [0-7])? [0-7]

View File

@ -1225,14 +1225,6 @@ public final class XeEoListener implements EoListener, Iterable<Directive> {
type = "bytes"; type = "bytes";
base = "bytes"; base = "bytes";
data = text.replaceAll("\\s+", "").replace("-", " ").trim(); data = text.replaceAll("\\s+", "").replace("-", " ").trim();
} else if (ctx.BOOL() != null) {
type = "bytes";
base = "bool";
if (Boolean.parseBoolean(text)) {
data = XeEoListener.bytesToHex((byte) 0x01);
} else {
data = XeEoListener.bytesToHex((byte) 0x00);
}
} else if (ctx.FLOAT() != null) { } else if (ctx.FLOAT() != null) {
type = "bytes"; type = "bytes";
base = "float"; base = "float";

View File

@ -29,12 +29,12 @@
# Allow to choose right options according to cases conditions. # Allow to choose right options according to cases conditions.
# Parameter cases is the array of two dimensional array, which # Parameter cases is the array of two dimensional array, which
# consist of condition bool value and expected value, if this # consist of condition bool value and expected value, if this
# condition is TRUE. # condition is true.
# e.g. # e.g.
# switch # switch
# * # *
# * # *
# TRUE # true
# "this value will be returned" # "this value will be returned"
# * # *
# FALSE # FALSE
@ -45,12 +45,12 @@
cases.length > len! cases.length > len!
# Take case by given index. # Take case by given index.
# If case key is TRUE, return case value. # If case key is true, return case value.
# Otherwise take next case. # Otherwise take next case.
[index] > case-at [index] > case-at
if > @ if > @
index.eq ^.len index.eq ^.len
TRUE true
if if
at. at.
^.cases.at index > case ^.cases.at index > case

View File

@ -1,68 +0,0 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2016-2024 Objectionary.com
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
/*
* @checkstyle PackageNameCheck (4 lines)
*/
package EOorg.EOeolang;
import org.eolang.AtVoid;
import org.eolang.Atom;
import org.eolang.Param;
import org.eolang.PhDefault;
import org.eolang.Phi;
import org.eolang.Versionized;
import org.eolang.XmirObject;
/**
* IF.
*
* @since 0.36.0
* @checkstyle TypeNameCheck (5 lines)
*/
@Versionized
@XmirObject(oname = "if")
public final class EOif extends PhDefault implements Atom {
/**
* Ctor.
* @param sigma Sigma
*/
public EOif(final Phi sigma) {
super(sigma);
this.add("condition", new AtVoid("condition"));
this.add("left", new AtVoid("left"));
this.add("right", new AtVoid("right"));
}
@Override
public Phi lambda() {
final Phi out;
if (new Param(this, "condition").strong(Boolean.class)) {
out = this.take("left");
} else {
out = this.take("right");
}
return out;
}
}

View File

@ -146,46 +146,37 @@ public interface Data {
*/ */
private static Phi toPhi(final Object obj) { private static Phi toPhi(final Object obj) {
final Phi phi; final Phi phi;
final byte[] bytes;
final boolean delta;
final Phi eolang = Phi.Φ.take("org").take("eolang"); final Phi eolang = Phi.Φ.take("org").take("eolang");
if (obj instanceof Boolean) { if (obj instanceof Boolean) {
phi = eolang.take("bool").copy();
delta = false;
if (obj.equals(true)) { if (obj.equals(true)) {
bytes = new byte[] {0x01}; phi = eolang.take("true");
} else { } else {
bytes = new byte[] {0x00}; phi = eolang.take("false");
} }
} else if (obj instanceof byte[]) { } else if (obj instanceof byte[]) {
phi = eolang.take("bytes").copy(); phi = eolang.take("bytes").copy();
delta = true; phi.attach((byte[]) obj);
bytes = (byte[]) obj;
} else if (obj instanceof Long) {
phi = eolang.take("int").copy();
delta = false;
bytes = new BytesOf((Long) obj).take();
} else if (obj instanceof String) {
phi = eolang.take("string").copy();
delta = false;
bytes = Data.ToPhi.unescapeJavaString(
(String) obj
).getBytes(StandardCharsets.UTF_8);
} else if (obj instanceof Double) {
phi = eolang.take("float").copy();
delta = false;
bytes = new BytesOf((Double) obj).take();
} else {
throw new IllegalArgumentException(
String.format(
"Unknown type of data: %s",
obj.getClass().getCanonicalName()
)
);
}
if (delta) {
phi.attach(bytes);
} else { } else {
final byte[] bytes;
if (obj instanceof Long) {
phi = eolang.take("int").copy();
bytes = new BytesOf((Long) obj).take();
} else if (obj instanceof String) {
phi = eolang.take("string").copy();
bytes = Data.ToPhi.unescapeJavaString(
(String) obj
).getBytes(StandardCharsets.UTF_8);
} else if (obj instanceof Double) {
phi = eolang.take("float").copy();
bytes = new BytesOf((Double) obj).take();
} else {
throw new IllegalArgumentException(
String.format(
"Unknown type of data: %s",
obj.getClass().getCanonicalName()
)
);
}
final Phi bts = eolang.take("bytes").copy(); final Phi bts = eolang.take("bytes").copy();
bts.attach(bytes); bts.attach(bytes);
phi.put(0, bts); phi.put(0, bts);

View File

@ -134,7 +134,7 @@ public final class Main {
/** /**
* Process one option. * Process one option.
* @param opt The option * @param opt The option
* @return TRUE if it's time to exit * @return True if it's time to exit
* @throws IOException If fails * @throws IOException If fails
*/ */
private static boolean parse(final String opt) throws IOException { private static boolean parse(final String opt) throws IOException {

View File

@ -29,18 +29,18 @@
# Test. # Test.
[] > compares-two-bools [] > compares-two-bools
eq. > @ eq. > @
TRUE true
TRUE true
# Test. # Test.
[] > true-as-bool [] > true-as-bool
TRUE.as-bool > @ true.as-bool > @
# Test. # Test.
[] > compares-two-different-types [] > compares-two-different-types
not. > @ not. > @
eq. eq.
TRUE true
42 42
# Test. # Test.

View File

@ -43,7 +43,7 @@
if if
i.as-int.lt 10 i.as-int.lt 10
g.backward g.backward
TRUE true
stdout "Finished!\n" stdout "Finished!\n"
i i
10 10
@ -62,7 +62,7 @@
* *
if if
x.eq 0 x.eq 0
g.forward TRUE g.forward true
TRUE TRUE
r.write (42.div x) r.write (42.div x)
(dataized r).as-bytes > result (dataized r).as-bytes > result

View File

@ -112,7 +112,7 @@
and. > @ and. > @
QQ.io.stdout e QQ.io.stdout e
m.free m.free
TRUE true
# Test. # Test.
[] > memory-is-strictly-typed-string-error-overflow [] > memory-is-strictly-typed-string-error-overflow

View File

@ -76,7 +76,7 @@
[] > negative-infinity-lt-positive-infinity [] > negative-infinity-lt-positive-infinity
eq. > @ eq. > @
negative-infinity.lt positive-infinity negative-infinity.lt positive-infinity
TRUE true
# Test. # Test.
[] > negative-infinity-not-lt-nan [] > negative-infinity-not-lt-nan
@ -100,13 +100,13 @@
[] > negative-infinity-lte-negative-infinity [] > negative-infinity-lte-negative-infinity
eq. > @ eq. > @
negative-infinity.lte negative-infinity negative-infinity.lte negative-infinity
TRUE true
# Test. # Test.
[] > negative-infinity-lte-positive-infinity [] > negative-infinity-lte-positive-infinity
eq. > @ eq. > @
negative-infinity.lte positive-infinity negative-infinity.lte positive-infinity
TRUE true
# Test. # Test.
[] > negative-infinity-not-lte-nan [] > negative-infinity-not-lte-nan
@ -118,13 +118,13 @@
[] > negative-infinity-lte-int [] > negative-infinity-lte-int
eq. > @ eq. > @
negative-infinity.lte 42 negative-infinity.lte 42
TRUE true
# Test. # Test.
[] > negative-infinity-lte-float [] > negative-infinity-lte-float
eq. > @ eq. > @
negative-infinity.lte 42.5 negative-infinity.lte 42.5
TRUE true
# Greater than. # Greater than.
[] > negative-infinity-gt-negative-infinity [] > negative-infinity-gt-negative-infinity

View File

@ -100,7 +100,7 @@
[] > positive-infinity-lte-positive-infinity [] > positive-infinity-lte-positive-infinity
eq. > @ eq. > @
positive-infinity.lte positive-infinity positive-infinity.lte positive-infinity
TRUE true
# Test. # Test.
[] > positive-infinity-not-lte-negative-infinity [] > positive-infinity-not-lte-negative-infinity

View File

@ -82,51 +82,51 @@
# This test should have acceptable time to pass. # This test should have acceptable time to pass.
[] > very-long-seq [] > very-long-seq
eq. > @ eq. > @
TRUE true
seq seq
* *
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
TRUE true
# Test. # Test.
[] > seq-single-dataization-int-equal-to-test [] > seq-single-dataization-int-equal-to-test

View File

@ -148,7 +148,7 @@
eq. eq.
"x" "x"
"x" "x"
TRUE true
# Test. # Test.
[] > one-symbol-string-compares [] > one-symbol-string-compares
@ -240,7 +240,7 @@
1 1
[e] [e]
QQ.io.stdout e > @ QQ.io.stdout e > @
TRUE true
# Test. # Test.
[] > slice-end-below-start [] > slice-end-below-start
@ -252,7 +252,7 @@
-1 -1
[e] [e]
QQ.io.stdout e > @ QQ.io.stdout e > @
TRUE true
# Test. # Test.
[] > slice-end-greater-actual [] > slice-end-greater-actual
@ -264,4 +264,4 @@
5 5
[e] [e]
QQ.io.stdout e > @ QQ.io.stdout e > @
TRUE true

View File

@ -35,7 +35,7 @@
FALSE FALSE
"1" "1"
* *
TRUE true
"2" "2"
"2" "2"
@ -62,13 +62,13 @@
switch switch
* *
* *
TRUE true
"TRUE1" "TRUE1"
* *
FALSE FALSE
"FALSE" "FALSE"
* *
TRUE true
"TRUE2" "TRUE2"
"TRUE1" "TRUE1"