annotate core/src/luan/impl/ConcatExpr.java @ 509:e3b0846dc2ef

throw exception for invalid indexes of string, binary, or java
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 22 May 2015 02:02:49 -0600
parents b48cfa14ba60
children f1601a4ce1aa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
166
4eaee12f6c65 move luan/interp to impl
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 88
diff changeset
1 package luan.impl;
8
8896068e0a4b finish operators
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
2
48
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 40
diff changeset
3 import luan.Luan;
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 40
diff changeset
4 import luan.LuanFunction;
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 40
diff changeset
5 import luan.LuanException;
460
b48cfa14ba60 improve stack trace
Franklin Schmidt <fschmidt@gmail.com>
parents: 410
diff changeset
6 import luan.LuanElement;
410
0d6098a29b3e fix ConcatExpr to use metamethod
Franklin Schmidt <fschmidt@gmail.com>
parents: 171
diff changeset
7 import luan.LuanBit;
8
8896068e0a4b finish operators
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
8
8896068e0a4b finish operators
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
9
8896068e0a4b finish operators
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
10 final class ConcatExpr extends BinaryOpExpr {
8896068e0a4b finish operators
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
11
460
b48cfa14ba60 improve stack trace
Franklin Schmidt <fschmidt@gmail.com>
parents: 410
diff changeset
12 ConcatExpr(LuanElement el,Expr op1,Expr op2) {
b48cfa14ba60 improve stack trace
Franklin Schmidt <fschmidt@gmail.com>
parents: 410
diff changeset
13 super(el,op1,op2);
8
8896068e0a4b finish operators
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
14 }
8896068e0a4b finish operators
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
15
49
8ede219cd111 add WebShell
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 48
diff changeset
16 @Override public Object eval(LuanStateImpl luan) throws LuanException {
8ede219cd111 add WebShell
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 48
diff changeset
17 Object o1 = op1.eval(luan);
8ede219cd111 add WebShell
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 48
diff changeset
18 Object o2 = op2.eval(luan);
460
b48cfa14ba60 improve stack trace
Franklin Schmidt <fschmidt@gmail.com>
parents: 410
diff changeset
19 LuanBit bit = luan.bit(el);
410
0d6098a29b3e fix ConcatExpr to use metamethod
Franklin Schmidt <fschmidt@gmail.com>
parents: 171
diff changeset
20 LuanFunction fn = bit.getBinHandler("__concat",o1,o2);
0d6098a29b3e fix ConcatExpr to use metamethod
Franklin Schmidt <fschmidt@gmail.com>
parents: 171
diff changeset
21 if( fn != null )
0d6098a29b3e fix ConcatExpr to use metamethod
Franklin Schmidt <fschmidt@gmail.com>
parents: 171
diff changeset
22 return Luan.first(bit.call(fn,"__concat",new Object[]{o1,o2}));
509
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 460
diff changeset
23 String s1 = luan.toString(o1);
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 460
diff changeset
24 String s2 = luan.toString(o2);
58
d6c454b7f58c make concat work with any type;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 49
diff changeset
25 return s1 + s2;
8
8896068e0a4b finish operators
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
26 }
8896068e0a4b finish operators
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
27 }