Skip to content

Commit a7e91c6

Browse files
committed
Fix string conversion between java and prolog
1 parent 2666127 commit a7e91c6

File tree

7 files changed

+29
-16
lines changed

7 files changed

+29
-16
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ minecraft_version = 1.12.2
33
forge_version = 14.23.5.2847
44

55
mod_name = OpenProlog
6-
mod_version=0.3.2
6+
mod_version=0.3.3
77
opencomputers_version=1.7.5.192
88

99
org.gradle.jvmargs = -Xmx2048m

src/main/java/com/syntheticentropy/ocpro/OpenProlog.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class OpenProlog
2020
@SuppressWarnings("WeakerAccess")
2121
public static final String NAME = "OpenProlog";
2222
@SuppressWarnings("WeakerAccess")
23-
public static final String VERSION = "0.3.2";
23+
public static final String VERSION = "0.3.3";
2424

2525
// resource path
2626
static final String RESOURCE_PATH = "/com/syntheticentropy/ocpro/";

src/main/java/com/syntheticentropy/ocpro/PrologArchitecture.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public class PrologArchitecture implements Architecture {
2929
private FutureTask<Object> vmQueryResponseFutureTask;
3030
private int vmQuerySleepTicks;
3131

32-
private ExecutionResult forceExecutionResult;
32+
public ExecutionResult forceExecutionResult;
3333

3434
enum VMResponse {
3535
RunSynchronous,
@@ -55,6 +55,7 @@ public PrologArchitecture(Machine machine) {
5555
public boolean initialize() {
5656

5757
//create the VM
58+
if (vm != null && vm.jip != null) vm.jip.releaseAllResources();
5859
vm = new PrologVM(this);
5960

6061
return true;
@@ -67,8 +68,11 @@ public void runSynchronized() {
6768

6869
@Override
6970
public ExecutionResult runThreaded(boolean isSynchronizedReturn) {
70-
if (forceExecutionResult != null)
71-
return forceExecutionResult;
71+
if (forceExecutionResult != null) {
72+
ExecutionResult tmpResult = forceExecutionResult;
73+
forceExecutionResult = null;
74+
return tmpResult;
75+
}
7276

7377
//Called for: synchronized return, init, or signal
7478
vmQueryResponse = VMResponse.None;
@@ -169,6 +173,7 @@ public Object[] synchronizedCall(Supplier<Object[]> task) {
169173
return synchronizedFutureTask.get();
170174
} catch (InterruptedException | ExecutionException e) {
171175
e.printStackTrace();
176+
crash(e.getMessage());
172177
}
173178
return null;
174179
}
@@ -199,7 +204,7 @@ public void crash(String e) {
199204
if (!synchronizedFutureTask.isDone()) {
200205
synchronizedFutureTask.cancel(true);
201206
}
202-
// machine.crash(e);
207+
machine.crash(e);
203208
}
204209

205210
@Override
@@ -215,6 +220,8 @@ public boolean recomputeMemory(Iterable<ItemStack> iterable) {
215220

216221
@Override
217222
public void close() {
223+
if (vm != null && vm.jip != null) vm.jip.releaseAllResources();
224+
if (vm != null) vm.jip = null;
218225
vm = null;
219226

220227
synchronizedSupplier = null;

src/main/java/com/syntheticentropy/ocpro/PrologVM.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,12 @@ public void run() {
3333
}
3434
} catch (Exception e) {
3535
state = State.Terminated;
36-
exitException = e;
36+
// exitException = e;
3737
owner.crash(e.getMessage());
3838
} finally {
39-
if (jip != null) {
40-
jip.releaseAllResources();
41-
jip = null;
42-
}
39+
// if (jip != null) {
40+
// jip.reset();
41+
// }
4342
}
4443
}
4544

src/main/java/com/syntheticentropy/ocpro/builtin/OcproBuiltIn.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public PrologObject rawToPrologObject(Object raw) {
1313
return Atom.createAtom(((Boolean) raw) ? "true" : "false");
1414
}
1515
if (raw instanceof String) {
16-
return new Functor(Atom.createAtom("string/1"), new PString((String) raw, true).getConsCell());
16+
return stringToFunctor((String) raw, "string");
1717
}
1818
if (raw instanceof Integer) {
1919
return Expression.createNumber((Integer) raw);
@@ -22,7 +22,7 @@ public PrologObject rawToPrologObject(Object raw) {
2222
return Expression.createNumber((Double) raw);
2323
}
2424
if (raw instanceof byte[]) {
25-
return new Functor(Atom.createAtom("bytes/1"), new PString(new String((byte[]) raw), true).getConsCell());
25+
return stringToFunctor(new String((byte[]) raw), "bytes");
2626
}
2727
if (raw instanceof HandleValue) {
2828
return Expression.createNumber(((HandleValue) raw).handle());
@@ -34,6 +34,10 @@ public PrologObject rawToPrologObject(Object raw) {
3434
return Atom.createAtom(raw.toString());
3535
}
3636

37+
public Functor stringToFunctor(String str, String functorName) {
38+
return new Functor(Atom.createAtom(functorName + "/1"), new ConsCell(new PString(PString.getList(str, true), true), null));
39+
}
40+
3741
public Object prologObjectToRaw(PrologObject prologObjectIndirect) {
3842
PrologObject prologObject = prologObjectIndirect instanceof Variable ?
3943
((Variable) prologObjectIndirect).getObject() : prologObjectIndirect;

src/main/java/com/ugos/jiprolog/engine/PString.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ public final boolean _unify(PrologObject obj, final Hashtable table) {
166166
}
167167
}
168168

169-
private static final ConsList getList(final String string, boolean chars) {
169+
public static final ConsList getList(final String string, boolean chars) {
170170
ConsList retList = null;
171171

172172
for (int i = string.length() - 1; i >= 0; i--) {

src/main/resources/com/syntheticentropy/ocpro/bios.pl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@
44
component_invoke(Address, exists, [string("init.pl")], [InitDoesExist]),
55
InitDoesExist.
66

7-
on_signal(Signal) :-
7+
8+
write_signal(Signal) :-
89
!, term_string(Signal, Text),
910
xterm_write(Text).
1011

12+
1113
biosMain :-
1214
component_type(gpu, Gpu),
1315
component_type(screen, Screen),
14-
component_invoke(Screen, turnOn, [], _),
16+
component_invoke(Screen, turnOn, [string("this is how it should be")], _),
1517
component_invoke(Gpu, bind, [Screen], _),
1618
component_invoke(Gpu, maxResolution, [], [MaxWidth, MaxHeight]),
1719
component_invoke(Gpu, setResolution, [MaxWidth, MaxHeight], _),
@@ -33,5 +35,6 @@
3335
; sleep(200), fail
3436
),
3537
xterm_write("got signal"),
38+
write_signal(Signal),
3639
on_signal(Signal),
3740
fail.

0 commit comments

Comments
 (0)