1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.millscript.millscript.functions;
22
23 import org.millscript.commons.vfs.VEntry;
24 import org.millscript.millscript.alert.Alerts;
25 import org.millscript.millscript.loaders.Loader;
26 import org.millscript.millscript.tools.CastLibrary;
27 import org.millscript.millscript.vm.Machine;
28 import org.millscript.millscript.vm.Package;
29
30 import java.io.IOException;
31
32 /**
33 * This class implements the MillScript <code>loadValueFromVEntry</code> function.
34 */
35 public class LoadValueFromVEntryFunction extends Function {
36
37 /**
38 * The package this function is declared in.
39 */
40 protected final Package pack;
41
42 /**
43 * Constructs a new LoadValueFromVEntryFunction for the specified package.
44 *
45 * @param pack the package this function belongs to
46 */
47 public LoadValueFromVEntryFunction( final Package p ) {
48 this.pack = p;
49 }
50
51 /**
52 * @see org.millscript.millscript.functions.Function#apply(org.millscript.millscript.vm.Machine, int)
53 */
54 @Override
55 public void apply( final Machine mc, final int nargs ) {
56
57 checkNargs( mc, 1, nargs );
58
59 final VEntry entry = CastLibrary.toVEntry( mc.popObject() );
60
61 final Loader loader = this.pack.makeLoaderFor( entry );
62
63 try {
64 mc.pushObject( loader.loadValue() );
65 } catch ( IOException ioex ) {
66 throw(
67 Alerts.compile( "IOException thrown while loading", null ).
68 culprit( "file", loader.getOrigin() ).
69 culprit( "reason", ioex.getMessage() ).
70 mishap()
71 );
72 }
73 }
74
75 }