annotate core/src/luan/modules/BinaryLuan.java @ 510:2da0bcb979b5

better error messages
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 22 May 2015 02:28:15 -0600
parents e3b0846dc2ef
children 473e456444ff
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
167
4c0131c2b650 merge luan/lib into modules
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 142
diff changeset
1 package luan.modules;
113
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
2
221
ec016471c6eb make LuanTable an interface
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 171
diff changeset
3 import luan.Luan;
113
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
4 import luan.LuanState;
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
5 import luan.LuanTable;
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
6 import luan.LuanFunction;
124
f537ff5e511d minor cleanup
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 113
diff changeset
7 import luan.LuanException;
302
2f8938fc518c fix modules Binary and Html
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 221
diff changeset
8 import luan.LuanMethod;
509
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 426
diff changeset
9 import luan.LuanBit;
113
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
10
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
11
168
ebe9db183eb7 rename *Lib.java to *Luan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 167
diff changeset
12 public final class BinaryLuan {
113
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
13
509
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 426
diff changeset
14 public static Object __index(LuanBit bit,final byte[] binary,Object key) throws LuanException {
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 426
diff changeset
15 LuanState luan = bit.luan;
409
abce9b0041b0 remove LuanState.require(), eval() is good enough
Franklin Schmidt <fschmidt@gmail.com>
parents: 404
diff changeset
16 LuanTable mod = (LuanTable)PackageLuan.require(luan,"luan:Binary");
426
23a93c118042 fix LuanTable.get() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents: 409
diff changeset
17 Object obj = mod.get(luan,key);
404
d55e873e1f0d metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents: 360
diff changeset
18 if( obj instanceof LuanFunction ) {
d55e873e1f0d metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents: 360
diff changeset
19 final LuanFunction fn = (LuanFunction)obj;
d55e873e1f0d metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents: 360
diff changeset
20 return new LuanFunction() {
d55e873e1f0d metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents: 360
diff changeset
21 @Override public Object call(LuanState luan,Object[] args) throws LuanException {
d55e873e1f0d metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents: 360
diff changeset
22 Object[] a = new Object[args.length+1];
d55e873e1f0d metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents: 360
diff changeset
23 a[0] = binary;
d55e873e1f0d metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents: 360
diff changeset
24 System.arraycopy(args,0,a,1,args.length);
d55e873e1f0d metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents: 360
diff changeset
25 return fn.call(luan,a);
d55e873e1f0d metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents: 360
diff changeset
26 }
d55e873e1f0d metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents: 360
diff changeset
27 };
305
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
28 }
509
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 426
diff changeset
29 if( bit.el != null )
510
2da0bcb979b5 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 509
diff changeset
30 throw bit.exception( "invalid index for binary in '"+bit.el.text()+"'" ) ;
509
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 426
diff changeset
31 else
510
2da0bcb979b5 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 509
diff changeset
32 throw bit.exception( "invalid index for binary") ;
113
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
33 }
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
34
305
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
35 static int start(byte[] binary,int i) {
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
36 int len = binary.length;
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
37 return i==0 ? 0 : i > 0 ? Math.min(i-1,len) : Math.max(len+i,0);
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
38 }
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
39
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
40 static int start(byte[] binary,Integer i,int dflt) {
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
41 return i==null ? dflt : start(binary,i);
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
42 }
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
43
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
44 static int end(byte[] binary,int i) {
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
45 int len = binary.length;
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
46 return i==0 ? 0 : i > 0 ? Math.min(i,len) : Math.max(len+i+1,0);
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
47 }
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
48
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
49 static int end(byte[] binary,Integer i,int dflt) {
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
50 return i==null ? dflt : end(binary,i);
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
51 }
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
52
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
53 @LuanMethod public static Byte[] byte_(LuanState luan,byte[] binary,Integer i,Integer j) throws LuanException {
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
54 Utils.checkNotNull(luan,binary);
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
55 int start = start(binary,i,1);
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
56 int end = end(binary,j,start+1);
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
57 Byte[] bytes = new Byte[end-start];
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
58 for( int k=0; k<bytes.length; k++ ) {
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
59 bytes[k] = binary[start+k];
302
2f8938fc518c fix modules Binary and Html
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 221
diff changeset
60 }
2f8938fc518c fix modules Binary and Html
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 221
diff changeset
61 return bytes;
113
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
62 }
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
63
305
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
64 @LuanMethod public static byte[] binary(byte... bytes) {
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
65 return bytes;
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
66 }
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
67
360
cbb94a7c7a9e allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents: 305
diff changeset
68 public static String to_string(byte[] binary) {
cbb94a7c7a9e allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents: 305
diff changeset
69 return new String(binary);
cbb94a7c7a9e allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents: 305
diff changeset
70 }
cbb94a7c7a9e allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents: 305
diff changeset
71
113
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
72 }