Merge remote-tracking branch 'origin/latest' into latest

This commit is contained in:
aNNiMON 2023-08-12 23:59:25 +03:00
commit aa62b71520
4 changed files with 20 additions and 11 deletions

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
*.own linguist-language=Scala

View File

@ -8,7 +8,7 @@ OwnLang - dynamic functional programming language inspired by Scala and Python.
| Free | Pro | Desktop | | Free | Pro | Desktop |
| :--: | :-: | :-----: | | :--: | :-: | :-----: |
| [![Free](https://developer.android.com/images/brand/en_generic_rgb_wo_45.png)](https://play.google.com/store/apps/details?id=com.annimon.ownlang.free) | [![Pro](https://developer.android.com/images/brand/en_generic_rgb_wo_45.png)](https://play.google.com/store/apps/details?id=com.annimon.ownlang) | [v1.5.0](https://github.com/aNNiMON/Own-Programming-Language-Tutorial/releases/tag/1.5.0) | [![Free](https://developer.android.com/images/brand/en_generic_rgb_wo_45.png)](https://play.google.com/store/apps/details?id=com.annimon.ownlang.free) | [![Pro](https://developer.android.com/images/brand/en_generic_rgb_wo_45.png)](https://play.google.com/store/apps/details?id=com.annimon.ownlang) | [v1.5.0](https://github.com/aNNiMON/Own-Programming-Language-Tutorial/releases/tag/v1.5.0)
Also available as AUR package: Also available as AUR package:

View File

@ -8,6 +8,7 @@ public class ClassInstanceValue implements Value {
private final String className; private final String className;
private final MapValue thisMap; private final MapValue thisMap;
private ClassMethod constructor; private ClassMethod constructor;
private UserDefinedFunction toString;
public ClassInstanceValue(String name) { public ClassInstanceValue(String name) {
this.className = name; this.className = name;
@ -17,28 +18,32 @@ public class ClassInstanceValue implements Value {
public MapValue getThisMap() { public MapValue getThisMap() {
return thisMap; return thisMap;
} }
public String getClassName() { public String getClassName() {
return className; return className;
} }
public void addField(String name, Value value) { public void addField(String name, Value value) {
thisMap.set(name, value); thisMap.set(name, value);
} }
public void addMethod(String name, ClassMethod method) { public void addMethod(String name, ClassMethod method) {
if (name.equals("toString")) {
toString = method;
}
thisMap.set(name, method); thisMap.set(name, method);
if (name.equals(className)) { if (name.equals(className)) {
constructor = method; constructor = method;
} }
} }
public void callConstructor(Value[] args) { public void callConstructor(Value[] args) {
if (constructor != null) { if (constructor != null) {
constructor.execute(args); constructor.execute(args);
} }
} }
public Value access(Value value) { public Value access(Value value) {
return thisMap.get(value); return thisMap.get(value);
} }
@ -46,7 +51,7 @@ public class ClassInstanceValue implements Value {
public void set(Value key, Value value) { public void set(Value key, Value value) {
final Value v = thisMap.get(key); final Value v = thisMap.get(key);
if (v == null) { if (v == null) {
throw new RuntimeException("Unable to add new field " throw new RuntimeException("Unable to add new field "
+ key.asString() + " to class " + className); + key.asString() + " to class " + className);
} }
thisMap.set(key, value); thisMap.set(key, value);
@ -69,14 +74,17 @@ public class ClassInstanceValue implements Value {
@Override @Override
public String asString() { public String asString() {
return "class " + className + "@" + thisMap; if (toString != null) {
return toString.execute(new Value[] {}).asString();
}
return className + "@" + thisMap;
} }
@Override @Override
public int type() { public int type() {
return Types.CLASS; return Types.CLASS;
} }
@Override @Override
public int hashCode() { public int hashCode() {
int hash = 5; int hash = 5;
@ -99,7 +107,7 @@ public class ClassInstanceValue implements Value {
public int compareTo(Value o) { public int compareTo(Value o) {
return asString().compareTo(o.asString()); return asString().compareTo(o.asString());
} }
@Override @Override
public String toString() { public String toString() {
return asString(); return asString();

View File

@ -58,7 +58,7 @@ public final class date implements Module {
value.set(YEAR, NumberValue.of(calendar.get(Calendar.YEAR))); value.set(YEAR, NumberValue.of(calendar.get(Calendar.YEAR)));
value.set(MONTH, NumberValue.of(calendar.get(Calendar.MONTH))); value.set(MONTH, NumberValue.of(calendar.get(Calendar.MONTH)));
value.set(DAY, NumberValue.of(calendar.get(Calendar.DAY_OF_MONTH))); value.set(DAY, NumberValue.of(calendar.get(Calendar.DAY_OF_MONTH)));
value.set(HOUR, NumberValue.of(calendar.get(Calendar.HOUR))); value.set(HOUR, NumberValue.of(calendar.get(Calendar.HOUR_OF_DAY)));
value.set(MINUTE, NumberValue.of(calendar.get(Calendar.MINUTE))); value.set(MINUTE, NumberValue.of(calendar.get(Calendar.MINUTE)));
value.set(SECOND, NumberValue.of(calendar.get(Calendar.SECOND))); value.set(SECOND, NumberValue.of(calendar.get(Calendar.SECOND)));
value.set(MILLISECOND, NumberValue.of(calendar.get(Calendar.MILLISECOND))); value.set(MILLISECOND, NumberValue.of(calendar.get(Calendar.MILLISECOND)));